From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 303C739A4A0 for ; Thu, 30 Jul 2026 16:19:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785428360; cv=none; b=LblxD0qUGVbG3t4n/2hbXTztCx1TzPVEVsjSLrp4WPWPzIvSeE3weLYDpOWgSbzUB2e7oxgk4pJJg6/oeq4ydKa8MSQUHYad+WDajNyPCga4fGQGt0A1+39My4jDRa/VxWcgqbuWDXmbr84NcP3E+yWuNxzMTMn2k5VaQz85fKE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785428360; c=relaxed/simple; bh=wYyXYRqo+5m6fDSZrA7VcCiGU6fKVHm0kgX5xTnPxGc=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=ujt1mCSpSElBr00oetUzEh9uyiPNAn/Ib/XD9uXjtcpEuQxL4nqKLn3zvlJ/w39+5ZJMn7Km8/Ek9ny/96AeDc5LcX1HcAVqRZK0V4tjByHmtG3D0J3CI2DzLdlLqItW4HzOQCat7ct4iC2P1JaFfqD+jbbOfWO2/mL389cosbs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=me/lWvC4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=CStaQZZS; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="me/lWvC4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="CStaQZZS" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66UFQl571680387 for ; Thu, 30 Jul 2026 16:19:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= cs2s79pOcvGj18JkogxK17ApOg6ZjNFEALIFF0mhsrk=; b=me/lWvC4cS2dSAZa q6cw/iggGzMi45EjSSLI9v5U5/FeqXSwMsxFlXPsFUNJN8x8HhPsvVMSQs/Lz4oo p/XF+M/AdOfhArexBdtDyduBx/mOOxoTy7mFgCmCirtQlRLAJRGxkDaOB13KlU1j dcqhY/uqegYDLL+WvfACQjfNwLZHw30hJkRAS6wNY6YNq3ZfdUZbzlFhTZjdFal+ jvEBlL7CFEbB2pj0+x1BAOtiyXhiF2w2VGC4a+sENmQJPRCeKNavAjUPjvEp69Tj QeDKTNPzV6s7nxJIM7jfteRoyStCpZWInZAxMCUXNYjeV9KQDOgFZg8WaVqc1mYH RnxxVQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fr8gy0kt0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 30 Jul 2026 16:19:18 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-5bf9f0ec129so4033e0c.3 for ; Thu, 30 Jul 2026 09:19:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1785428357; x=1786033157; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cs2s79pOcvGj18JkogxK17ApOg6ZjNFEALIFF0mhsrk=; b=CStaQZZSN6VsuTbloChJZqTvpcrFedifTLYReNiLD+2v9T0kZgtBGhr4LEiCeGBjoy lExxOXFYCyeUILuDlGcQoMr3mfXYOeMdMTjzpB0OGI+AjylcaSNfedZw090mZBby6pIt zdT2ZZl12S0QAlxB81E8zSh4/qxyJnT2pjxsJ8eUggpbiOmvtI9Vl1ZZbaxyW8spP5eR /pnp9Eo/WlpLy7vSQiqoIUCbNsBKv3IYIwcdsKNeEDkj781HiSyBC1n/g498YKqHfTFX 3p6Umbtw+BewTJTyGM79aLpnvve+0AEkS/d6oBOMxu0iE1bu5lrNjl3q6N+KXnhG5KLy 8hBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785428357; x=1786033157; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cs2s79pOcvGj18JkogxK17ApOg6ZjNFEALIFF0mhsrk=; b=Y7VJ1f/FyW4gGpce4XpoG1JBRX89QGRNMpqAMZ3novxQcZgTXZZGDJcK7CaVJqhvIe WhpKfEJAIMkFIX/rieVV7e+D1uTfCmJW9fEa2FVxwXHxd+T2NosEjXykGSs6Ooz8yAGX dS4nDBGHf7RlmBlJOHLb59Zx0Y6mA1KaBiFQzUGxi2kpNW6K2CuiR82ijWwUW1V8GF+V 3E2T8RSRI0v0RAglrgS9mCF+rw9XqRqf0ij7iZY1qafYTQV0yB/nhWJv43T4hA/kBzG9 49akOgm7pgOYicjFTwl0Th3ykZkVQRgAHEJcSPnabR6idIFNWuBkiOaj20u3QmL6rOej jmXA== X-Forwarded-Encrypted: i=1; AHgh+Rp+a0rBzcof6Q6D+g5wWmsS6EgDeqxaq33FTwY2G7WeOqfd5m+29iQ81Hw+oBlBGK7V9pj0hn2uN7AW3lQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyYOBeSGoMZT5aw2xoMwrvdqiS0e5kqhDI38lDFvy44uR/7HKKb CjWE4FuWXkqREW0aAeiH7gYyZ+JM9cVrZDk+vbhRK5uGkPqp3AsjGTDwc1WWMpnBzxAmp2kiKyr auXUkP75sSMr6M7YuXlL54DZtqi+0o8l10McpApAmpI3TxwwEn7KP38Ekp525nO+yNtB7qHZxTZ I= X-Gm-Gg: AR+sD11RZ6n/SnxucYvTbJSzJS0KANezwBIOwnu0EL25ywgPcgb0ZJe7nRcY0XCic7x uHtpbrZ0HmmMxkNilWFscryOmYHLpXxr+Ab2nZK5siJgvUVl5gRs4K5dl+sggApaFZCD67518o6 kZUFOq96AFGMzBQ1edQWwW53mp2W8q7lgnlw4o5I3vRKeklut8QPoaRl+biNrX9Ed+2Xbx73xv5 d4ggkVWf/41w5ntNw9paJANlaoMfbLzRNZbB19zs8fYjMrjtLG2Oo7sE2heWxN0rFNNRcCf+jUB 0tPKCOCaveCrBnXov1AbHPxEJPFzHc7vqgwSF0pk5e6N5q4nHhnSnYrOcZIr13cpwJ9yQ7EewN9 se0ZNQ2Yf74m03i3b1v9s4vrq X-Received: by 2002:a05:6102:3585:b0:74a:b1ee:e21b with SMTP id ada2fe7eead31-7583f18ec20mr587450137.1.1785428357152; Thu, 30 Jul 2026 09:19:17 -0700 (PDT) X-Received: by 2002:a05:6102:3585:b0:74a:b1ee:e21b with SMTP id ada2fe7eead31-7583f18ec20mr587435137.1.1785428356560; Thu, 30 Jul 2026 09:19:16 -0700 (PDT) Received: from [192.168.120.193] ([178.235.128.140]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b2db9baa18sm467105e87.48.2026.07.30.09.19.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Jul 2026 09:19:15 -0700 (PDT) Message-ID: Date: Thu, 30 Jul 2026 18:19:12 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] serial: qcom-geni: Convert console to nbcon To: Bjorn Andersson , Greg Kroah-Hartman , Jiri Slaby Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org References: <20260729-qcom-geni-nbcon-v1-0-3053b96465ed@oss.qualcomm.com> <20260729-qcom-geni-nbcon-v1-1-3053b96465ed@oss.qualcomm.com> Content-Language: en-US From: Konrad Dybcio In-Reply-To: <20260729-qcom-geni-nbcon-v1-1-3053b96465ed@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: VfIGLIDVFN0Wbs5Uc3n8tIgz05JCQB2q X-Proofpoint-ORIG-GUID: VfIGLIDVFN0Wbs5Uc3n8tIgz05JCQB2q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzMwMDEyMyBTYWx0ZWRfX+OdSBR5b3zRh MuH6rRKfjzILb0NrySbTK+pYdbvIPMvhdYP2R/HDa/Y7Efnet+mRBfOMxhG6YX8YoabKNAGjycG 6kCd6rtNL3YGXS9pTlh37Jy8YxW5gNLf+RpCrwvQVwGk3p/b4tExrxgaMLP1tHT4z6bMBH3qsnv O6uNDZnDEUiioDR1Pnz+wopVuKf1sEloUYhR/3MjaRDTwfqx6a/g+nlXjSX6Ae8wjCfa8eeEUHw MXtrUhOH55nHCvIVJCb6pDzruR76mptARWT1o3WQxDSjXr6V4LEB65pSxLPRP6M9nXgFP9czE/U j3aTy+izrzTWkHuGo32oRb/AGhgEKoAUTrJiPZY2izrNY5JU9k+Muof3QJc6MqnVr4A7mSlacwe l1BfV6yQDL6c1KAMTQqmhNLe1wlUZMbqtMjiGFk8MzL4+DM2ZApiPgJRqSIs3WeIx0ntD75bR4a K/NGfsDGT2vX+x2pkdA== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzMwMDEyMyBTYWx0ZWRfX2lsHtW47FIq9 6ZjzQYkE5M7gRhlCDEPJkk/e8wZ1NDE7r/ytDo8iuv3qnFCSxlJJprkch8AZNZone/y5xfTZuEZ UQNDnCT5t9cQDMaCFjhEiGuV2dvc690= X-Authority-Analysis: v=2.4 cv=MuliLWae c=1 sm=1 tr=0 ts=6a6b7986 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=PRfkaYvzSr8QmIIGAkY2Sg==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=fnIB__cAoprSpsgZYR4A:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-30_04,2026-07-30_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607300123 On 7/29/26 11:44 PM, Bjorn Andersson wrote: > The legacy GENI console writer serializes every message around a > synchronous polled M-side transfer. It blocks printk callers for UART > wire time and cannot provide atomic output while normal console output is > active. > > Convert the console to nbcon threaded and atomic writers. Use the UART > port lock as the device lock and bound threaded M-side commands so > urgent diagnostics can take over atomic output. The threaded writer is > batching the output in 32-source-byte commands, a value chosen to > balance the command setup overhead with atomic-handoff latency. > > Atomic output can cancel an active normal TX command. Use irq_work to > resume queued TTY output afterward, honor flow control, and prevent the > deferred restart from accessing the port during shutdown or removal. > > Assisted-by: OpenCode:GPT-5.5 > Signed-off-by: Bjorn Andersson > --- [...] > + while (offset < wctxt->len) { Other nbcon drivers access wctxt->len in write_thread with READ_ONCE, I believe we need to do the same [...] > +static void qcom_geni_serial_console_write_atomic(struct console *co, > + struct nbcon_write_context *wctxt) > +{ > struct qcom_geni_serial_port *port; > + struct uart_port *uport; > u32 m_irq_en, s_irq_en; > - bool locked = true; > - unsigned long flags; > - > - WARN_ON(co->index < 0 || co->index >= GENI_UART_CONS_PORTS); Unrelated? [...] > +/* Caller holds the UART port lock. */ > +static void qcom_geni_serial_resume_tx(struct uart_port *uport) > +{ > + if (!uart_tx_stopped(uport) && > + !kfifo_is_empty(&uport->state->port.xmit_fifo)) > + qcom_geni_serial_start_tx_fifo(uport); > +} This is a single-use oneliner, but perhaps having 3+2 conditions is better than having 5 conditions to an if statement.. > + > +static void qcom_geni_serial_restart_tx(struct irq_work *work) > +{ > + struct qcom_geni_serial_port *port = container_of(work, > + struct qcom_geni_serial_port, tx_kick); > + struct uart_port *uport = &port->uport; > + > + if (!READ_ONCE(port->tx_kick_enabled) || !uport->state || uport->suspended) > + return; > + > + uart_port_lock(uport); > + if (READ_ONCE(port->tx_kick_enabled) && uport->state && !uport->suspended) > + qcom_geni_serial_resume_tx(uport); > + uart_port_unlock(uport); > +} > + > static void qcom_geni_serial_stop_tx_fifo(struct uart_port *uport) > { > u32 irq_en; > @@ -1182,6 +1284,11 @@ static int setup_fifos(struct qcom_geni_serial_port *port) > > static void qcom_geni_serial_shutdown(struct uart_port *uport) > { > + struct qcom_geni_serial_port *port = to_dev_port(uport); > + > + /* Atomic console output queues tx_kick without taking the port lock. */ non-atomic? Konrad