From nobody Sat Feb 7 11:38:07 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 59C6B27CCF0; Fri, 23 Jan 2026 12:18:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170698; cv=none; b=KHq60lOmzr3qGbeT+95xP8y1Q2MyhMdScep/okI2OJF7nFSk61meRAZjCUBg6tH3CwbwtCcslNdDVKekkLVLnbtHK/hyq3ZRLHwDdNnps+N2adnvO5V+lHZPMvq769FVyspolKv+XWwDH4AtSmqU/hydF3t/0xhgoph2MjJbQr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170698; c=relaxed/simple; bh=YzubzAFZCOZGrHGxvv3+ISh10iWECd1XJZnMJAfb4xU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lOLiAqUWXkE1YMeKbla61jbm37ljkVqbHs1o9g5Y84UBi+CM43xaXej7ZdvVMt+pSZZIlUKI9LCWw78nTzrRsaOfooTDbW6WxITESs661aiXFuEpT6gy5ZhHtSrIIgY4Jf7arrks7wxifYMyH6yKmLj35c3cwEmv5pUQndz7Tec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=QvMOXeG8; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="QvMOXeG8" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=OET3znP1m4/7noEK4AnYb6WIYY6XK6AggZNLvXC7sVc=; b=QvMOXeG8gAYp0ThRpKyLClibSt EN9PMDZc+jLP62XeHT5iTxxst2E8MHIE/9iBtzjSXJmK8QKkXgo+Tn7y+PBgpkdIRtLkBMVfLtmTo Yv83tJf35SzmP0pTbAz7/3IYwM8YHXLrJBLvD22zFBjGFTiOh0yPf+IqKvaTM//Fw7HsSqUWVlxk4 4DNtGgxQUC2OdmUFUxzDrBap2+kgqcHc4fANZ9kj+Nzo/etgD6PboOQQ0a77bC8EFoUDvm2+y4Rr8 tkjJ76JIB8lntzZ6s6HbIjJWfpF4vXRmQft5g7AOI3/8lKDZRUOnWSjxP/EhLamXFQdYkaVPnYDm4 hH1cqUZw==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vjG6v-00DpeF-Ed; Fri, 23 Jan 2026 12:17:57 +0000 From: Breno Leitao Date: Fri, 23 Jan 2026 04:17:24 -0800 Subject: [PATCH net-next v4 1/5] printk: Add execution context (task name/CPU) to printk_info Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260123-nbcon-v4-1-46a5cf567926@debian.org> References: <20260123-nbcon-v4-0-46a5cf567926@debian.org> In-Reply-To: <20260123-nbcon-v4-0-46a5cf567926@debian.org> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , pmladek@suse.com, john.ogness@linutronix.de Cc: Greg Kroah-Hartman , Steven Rostedt , Sergey Senozhatsky , Andrew Morton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, gustavold@gmail.com, calvin@wbinvd.org, jv@jvosburgh.net, mpdesouza@suse.com, kernel-team@meta.com X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=9210; i=leitao@debian.org; h=from:subject:message-id; bh=YzubzAFZCOZGrHGxvv3+ISh10iWECd1XJZnMJAfb4xU=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpc2bqHE06eXAQYPvR3PTOPtk/SOz+Hd8Q56O0x PEmCJWjQreJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXNm6gAKCRA1o5Of/Hh3 belXD/9dUlQ8DTCcCLTrwsAyGxWob2IN0b7Qp2fRVdZCrhni/lacZEwIYbE8RNdOSzUvmQ6caOt 4gYLhk6ZZ/UeAsjoE5kDvWszq8lpi6h6pmsE4fRknbZpZBZ4VlqqkzWf0f7kg2QH73ky80RnnqU XGEjokojSVqakwHJMc66eHKvRjs9gvrLuyFQ9iLJ/wwXFOHUZjWrxlgWtJchvnROx/NI4ZJXU7g mDHi3ydK3CTyIVZFJTG+wV2wA4fISqVEQbUtxJNbqGVBhijK5Gu/EVdNuJ0/IUJkdJVHET2rj+u tqkuhyzr2wGmYn04xLv38x3eWTYNzmxLucpSMNgxlVvicp61zenAUXcD8uc5w4qWnfh2W3MCEKR qvw+Ui/blZQ/Aqr3c4NeRa502KvAUV0j0WmnoVHTmWWs0mjmmUcBri5+5sz6WOQxDSykZFc6LVw 0mwNoNRV9Lw5bVVQXGUvtmhBD5UXMbJBQz6hRuQZeJaiV0Fig9m3Fa4DsN9vOa7RUhvpI2k07tf zN15E1AMhOG4CFhemqe4RNXCOUEqEbp22yZh9ubh9bydlpstEkqZVjyHHLN8BQT2bDgpi6sdSvK s1enM8F2ASGzFN8UbtheJx0EXOeIbNNeA856cTESg8beNjH2FTrCT+RZi44/MceS1WGe6J89uUp MBnhPchn745FXuw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Extend struct printk_info to include the task name, pid, and CPU number where printk messages originate. This information is captured at vprintk_store() time and propagated through printk_message to nbcon_write_context, making it available to nbcon console drivers. This is useful for consoles like netconsole that want to include execution context in their output, allowing correlation of messages with specific tasks and CPUs regardless of where the console driver actually runs. The feature is controlled by CONFIG_PRINTK_EXECUTION_CTX, which is automatically selected by CONFIG_NETCONSOLE_DYNAMIC. When disabled, the helper functions compile to no-ops with no overhead. Suggested-by: John Ogness Signed-off-by: Breno Leitao Signed-off-by: Petr Mladek --- drivers/net/Kconfig | 2 ++ include/linux/console.h | 8 +++++++ kernel/printk/internal.h | 8 +++++++ kernel/printk/nbcon.c | 15 ++++++++++++ kernel/printk/printk.c | 50 +++++++++++++++++++++++++++++++++++= +++- kernel/printk/printk_ringbuffer.h | 5 ++++ lib/Kconfig.debug | 20 ++++++++++++++++ 7 files changed, 107 insertions(+), 1 deletion(-) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 9c7953f8e6377..356c70be868ff 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -341,6 +341,8 @@ config NETCONSOLE_DYNAMIC bool "Dynamic reconfiguration of logging targets" depends on NETCONSOLE && SYSFS && CONFIGFS_FS && \ !(NETCONSOLE=3Dy && CONFIGFS_FS=3Dm) + select PRINTK_EXECUTION_CTX + select CONSOLE_HAS_EXECUTION_CTX help This option enables the ability to dynamically reconfigure target parameters (interface, IP addresses, port numbers, MAC addresses) diff --git a/include/linux/console.h b/include/linux/console.h index fc9f5c5c1b04c..cc5dc3bf58b60 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -298,12 +298,20 @@ struct nbcon_context { * @outbuf: Pointer to the text buffer for output * @len: Length to write * @unsafe_takeover: If a hostile takeover in an unsafe state has occurred + * @cpu: CPU on which the message was generated + * @pid: PID of the task that generated the message + * @comm: Name of the task that generated the message */ struct nbcon_write_context { struct nbcon_context __private ctxt; char *outbuf; unsigned int len; bool unsafe_takeover; +#ifdef CONFIG_PRINTK_EXECUTION_CTX + int cpu; + pid_t pid; + char comm[TASK_COMM_LEN]; +#endif }; =20 /** diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h index 5f5f626f42794..5fdea56827564 100644 --- a/kernel/printk/internal.h +++ b/kernel/printk/internal.h @@ -281,12 +281,20 @@ struct printk_buffers { * nothing to output and this record should be skipped. * @seq: The sequence number of the record used for @pbufs->outbuf. * @dropped: The number of dropped records from reading @seq. + * @cpu: CPU on which the message was generated. + * @pid: PID of the task that generated the message + * @comm: Name of the task that generated the message. */ struct printk_message { struct printk_buffers *pbufs; unsigned int outbuf_len; u64 seq; unsigned long dropped; +#ifdef CONFIG_PRINTK_EXECUTION_CTX + int cpu; + pid_t pid; + char comm[TASK_COMM_LEN]; +#endif }; =20 bool printk_get_next_message(struct printk_message *pmsg, u64 seq, diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c index 32fc12e536752..391a58be0c5b3 100644 --- a/kernel/printk/nbcon.c +++ b/kernel/printk/nbcon.c @@ -946,6 +946,19 @@ void nbcon_reacquire_nobuf(struct nbcon_write_context = *wctxt) } EXPORT_SYMBOL_GPL(nbcon_reacquire_nobuf); =20 +#ifdef CONFIG_PRINTK_EXECUTION_CTX +static void wctxt_load_execution_ctx(struct nbcon_write_context *wctxt, + struct printk_message *pmsg) +{ + wctxt->cpu =3D pmsg->cpu; + wctxt->pid =3D pmsg->pid; + memcpy(wctxt->comm, pmsg->comm, TASK_COMM_LEN); +} +#else +static void wctxt_load_execution_ctx(struct nbcon_write_context *wctxt, + struct printk_message *pmsg) {} +#endif + /** * nbcon_emit_next_record - Emit a record in the acquired context * @wctxt: The write context that will be handed to the write function @@ -1048,6 +1061,8 @@ static bool nbcon_emit_next_record(struct nbcon_write= _context *wctxt, bool use_a /* Initialize the write context for driver callbacks. */ nbcon_write_context_set_buf(wctxt, &pmsg.pbufs->outbuf[0], pmsg.outbuf_le= n); =20 + wctxt_load_execution_ctx(wctxt, &pmsg); + if (use_atomic) con->write_atomic(con, wctxt); else diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 1d765ad242b82..7daaa27705339 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2131,12 +2131,37 @@ static inline void printk_delay(int level) } } =20 +#define CALLER_ID_MASK 0x80000000 + static inline u32 printk_caller_id(void) { return in_task() ? task_pid_nr(current) : - 0x80000000 + smp_processor_id(); + CALLER_ID_MASK + smp_processor_id(); +} + +#ifdef CONFIG_PRINTK_EXECUTION_CTX +/* Store the opposite info than caller_id. */ +static u32 printk_caller_id2(void) +{ + return !in_task() ? task_pid_nr(current) : + CALLER_ID_MASK + smp_processor_id(); } =20 +static pid_t printk_info_get_pid(const struct printk_info *info) +{ + u32 caller_id =3D info->caller_id; + u32 caller_id2 =3D info->caller_id2; + + return caller_id & CALLER_ID_MASK ? caller_id2 : caller_id; +} + +static int printk_info_get_cpu(const struct printk_info *info) +{ + return ((info->caller_id & CALLER_ID_MASK ? + info->caller_id : info->caller_id2) & ~CALLER_ID_MASK); +} +#endif + /** * printk_parse_prefix - Parse level and control flags. * @@ -2213,6 +2238,27 @@ static u16 printk_sprint(char *text, u16 size, int f= acility, return text_len; } =20 +#ifdef CONFIG_PRINTK_EXECUTION_CTX +static void printk_store_execution_ctx(struct printk_info *info) +{ + info->caller_id2 =3D printk_caller_id2(); + get_task_comm(info->comm, current); +} + +static void pmsg_load_execution_ctx(struct printk_message *pmsg, + const struct printk_info *info) +{ + pmsg->cpu =3D printk_info_get_cpu(info); + pmsg->pid =3D printk_info_get_pid(info); + memcpy(pmsg->comm, info->comm, TASK_COMM_LEN); +} +#else +static void printk_store_execution_ctx(struct printk_info *info) {} + +static void pmsg_load_execution_ctx(struct printk_message *pmsg, + const struct printk_info *info) {} +#endif + __printf(4, 0) int vprintk_store(int facility, int level, const struct dev_printk_info *dev_info, @@ -2320,6 +2366,7 @@ int vprintk_store(int facility, int level, r.info->caller_id =3D caller_id; if (dev_info) memcpy(&r.info->dev_info, dev_info, sizeof(r.info->dev_info)); + printk_store_execution_ctx(r.info); =20 /* A message without a trailing newline can be continued. */ if (!(flags & LOG_NEWLINE)) @@ -3002,6 +3049,7 @@ bool printk_get_next_message(struct printk_message *p= msg, u64 seq, pmsg->seq =3D r.info->seq; pmsg->dropped =3D r.info->seq - seq; force_con =3D r.info->flags & LOG_FORCE_CON; + pmsg_load_execution_ctx(pmsg, r.info); =20 /* * Skip records that are not forced to be printed on consoles and that diff --git a/kernel/printk/printk_ringbuffer.h b/kernel/printk/printk_ringb= uffer.h index 4ef81349d9fbe..1651b53ece34f 100644 --- a/kernel/printk/printk_ringbuffer.h +++ b/kernel/printk/printk_ringbuffer.h @@ -23,6 +23,11 @@ struct printk_info { u8 flags:5; /* internal record flags */ u8 level:3; /* syslog level */ u32 caller_id; /* thread id or processor id */ +#ifdef CONFIG_PRINTK_EXECUTION_CTX + u32 caller_id2; /* caller_id complement */ + /* name of the task that generated the message */ + char comm[TASK_COMM_LEN]; +#endif =20 struct dev_printk_info dev_info; }; diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index ba36939fda79b..57f91ee10b8e6 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -35,6 +35,26 @@ config PRINTK_CALLER no option to enable/disable at the kernel command line parameter or sysfs interface. =20 +config CONSOLE_HAS_EXECUTION_CTX + bool + help + Selected by console drivers that support execution context + (task name/CPU) in their output. This enables PRINTK_EXECUTION_CTX + to provide the necessary infrastructure. + +config PRINTK_EXECUTION_CTX + bool "Include execution context (task/CPU) in printk messages" + depends on PRINTK && CONSOLE_HAS_EXECUTION_CTX + default CONSOLE_HAS_EXECUTION_CTX + help + This option extends struct printk_info to include extra execution + context in printk, such as task name and CPU number from where the + message originated. This is useful for correlating printk messages + with specific execution contexts. + + This is automatically enabled when a console driver that supports + execution context is selected. + config STACKTRACE_BUILD_ID bool "Show build ID information in stacktraces" depends on PRINTK --=20 2.47.3 From nobody Sat Feb 7 11:38:07 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 4EC852DC770; Fri, 23 Jan 2026 12:18:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170700; cv=none; b=WGzJVWdPNzEw2aGacB8QpaKZ7ISCb2+tvRBCCUwI1UrE7yJyz16jRghc1Pdb0WKj0zoOKiAHG0nFmw0wBRgQmTgGIQSF5aIq845gdy5k50Gx7CniiQwXOoFyGw0yhAV//7w6f9oEVOWPTmkT//oS15oKpGIqHE1TiBCVaLAUk0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170700; c=relaxed/simple; bh=sM4MmBb2STkbv+3RBVIqkeR0mqGw9WVKg1AHc37unH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B5rcdWEhI1W1fO6QDXXiWBql6m0LX0XahK4q518iDZGF89SxfzZ/2DxrAbuW7iI8GARVAnzAjXz2x0oQCpHmRGZ8HjFpQ7BaAV84u7Eqg9n0YOFRgKaOgu/Of2mzi7H2pH3/negIjzpMrKdzif3CCQoJw6fKNqt0upWNV8nOj+0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=jZ9qKQ2X; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="jZ9qKQ2X" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=46Q3/PMzTu+WOHkGQb8g4PO/Yj+7Lf8peeoI+CL66Uo=; b=jZ9qKQ2Xn10dCnJvERTuRgKE0z w4Z45GmrRCD6X1nPIUPvR4uWttMWb41kLzVdc8lSsrJvKkUFNxTjGOSGtPXEisx6e7mRZtPuk8R/3 guaN0Y412BDf2PChJXMn2SBwolr4BYQUmhwls0F6KN5bhNMHUkCITqXJXcJBswcnv1Hkl01Xqk3Fl lqhqjOgnUWPnT9v4PZeVwZ3Tvq4Hfl7ei3XL1n0gCaQjER2VJcDKgs4nFjZEsPsdDe0MN1nKxh7r4 koMFQkGRQ7IC0NJA6t18XlKt5HAOm/hLMGHLh5eErK+moMYPA80zu1DV1fjZ2RMf3kc/+4anoPLn8 52qt/VIg==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vjG70-00DpeL-TY; Fri, 23 Jan 2026 12:18:03 +0000 From: Breno Leitao Date: Fri, 23 Jan 2026 04:17:25 -0800 Subject: [PATCH net-next v4 2/5] netconsole: extract message fragmentation into send_msg_udp() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260123-nbcon-v4-2-46a5cf567926@debian.org> References: <20260123-nbcon-v4-0-46a5cf567926@debian.org> In-Reply-To: <20260123-nbcon-v4-0-46a5cf567926@debian.org> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , pmladek@suse.com, john.ogness@linutronix.de Cc: Greg Kroah-Hartman , Steven Rostedt , Sergey Senozhatsky , Andrew Morton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, gustavold@gmail.com, calvin@wbinvd.org, jv@jvosburgh.net, mpdesouza@suse.com, kernel-team@meta.com, Simon Horman X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=2097; i=leitao@debian.org; h=from:subject:message-id; bh=sM4MmBb2STkbv+3RBVIqkeR0mqGw9WVKg1AHc37unH8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpc2bqGkT8KGl0Ke86GM+ZyfVSjDwxGL7EMqlWX dUPtLvAhZ+JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXNm6gAKCRA1o5Of/Hh3 bT5ZD/9N4l4vUHyBmLVKBjpGhz26fxwUoSVpcd5CelmbsinSTFscWZ5SMv3adSuHV93ndjT85IV zW7ffIGa1kDHD+LKqEEIoo4wrBoWxWylCA6hUjBRMms8kOZrEbwI1ow3In9bd0bJUvmYOcKaNae 5Uhfbrl2WN89VIGJLtXs4N+hOwMkFC6KHhjhFnZcAwwH1BNcAx8C9ravQj2ylg269Or6g+oikqO a87hfMvIFSUdbb0uzxjVfKXEM2rcJbDZJFHxOJJfy+HneYKJLMuIyOmniYaRlsfnQ4bYmG/Wc7p iptjLBaJhF/gl6li4qceaSXCex57fqK3CWBwbpHK7hOr2egZe5DTH97b2Lz9slPy+QZICxqaHYL 7Te8ko2VMQr6Ih8hjdr0+kigAbSBFFa+Rj4MO5lsDyoX70rwtbT+rJKHcq+31DMnU0nlMKEOzr4 CMcCo0IpvSCmIuS+PVyAL7fuyNEjQm9fYKZAOUKIAEEhmxvT1jdBASYXn5Gcl0U93n/ljbDGjW5 LZVRmTg87pFj1dhoGvF+Hn9ORPofF4TxYrAGOswN3wtzHuEpsZwa6jRlUvMQUcl4NpvAUdYbBll nO5YHtJ1efZQrOb76m6XVKhKVS8f9Na0VIU7E0EeS8A1u1q6nIlM2ALzCl2ci871VHCe8OgNIS6 Ztjkv54jhD4m3+w== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Extract the message fragmentation logic from write_msg() into a dedicated send_msg_udp() function. This improves code readability and prepares for future enhancements. The new send_msg_udp() function handles splitting messages that exceed MAX_PRINT_CHUNK into smaller fragments and sending them sequentially. This function is placed before send_ext_msg_udp() to maintain a logical ordering of related functions. No functional changes - this is purely a refactoring commit. Reviewed-by: Petr Mladek Reviewed-by: Simon Horman Signed-off-by: Breno Leitao --- drivers/net/netconsole.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 82c232f9ede24..e37250bf495fa 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1876,12 +1876,24 @@ static void write_ext_msg(struct console *con, cons= t char *msg, spin_unlock_irqrestore(&target_list_lock, flags); } =20 +static void send_msg_udp(struct netconsole_target *nt, const char *msg, + unsigned int len) +{ + const char *tmp =3D msg; + int frag, left =3D len; + + while (left > 0) { + frag =3D min(left, MAX_PRINT_CHUNK); + send_udp(nt, tmp, frag); + tmp +=3D frag; + left -=3D frag; + } +} + static void write_msg(struct console *con, const char *msg, unsigned int l= en) { - int frag, left; unsigned long flags; struct netconsole_target *nt; - const char *tmp; =20 if (oops_only && !oops_in_progress) return; @@ -1899,13 +1911,7 @@ static void write_msg(struct console *con, const cha= r *msg, unsigned int len) * at least one target if we die inside here, instead * of unnecessarily keeping all targets in lock-step. */ - tmp =3D msg; - for (left =3D len; left;) { - frag =3D min(left, MAX_PRINT_CHUNK); - send_udp(nt, tmp, frag); - tmp +=3D frag; - left -=3D frag; - } + send_msg_udp(nt, msg, len); } } spin_unlock_irqrestore(&target_list_lock, flags); --=20 2.47.3 From nobody Sat Feb 7 11:38:07 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 EFAD5262808; Fri, 23 Jan 2026 12:18:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170697; cv=none; b=Go8Sb0l18dL2sNkfpw2PZdvxw8PsfwHh3FSBNhu+4+iDE9nGIXUN+KAWIho4kY8uojdB+qmUPwbKXiTfYX9nF6YJ66I9fgelmDydJXi8RyXKykNf1/1FLr2/MsjQj8nvsth8ALS5kZK2PkwqtbvivVADu8AsZjw4ocuybgLYJwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170697; c=relaxed/simple; bh=JFP0hdML0vErS40bsyhMRJZeTqHHd/Fr+2NgT22nVIk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R8GNXYywZO+gPmdMTtiCrAicQD153WI8P7xAHsabhr4mq7g8dmAkU4OILrhhZkZqe3r1YJrg39APpRsp4ImOkWlEFq4JS8PmKl3Gu0dEG1tYNb7pmHnSengIXgDOCbwXMF0Dceci1h9Vda23B5fjKkRVqTE7japRkngT7sBqJNA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=sB+rrEOp; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="sB+rrEOp" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=KqTfxsd77ZKen+IFl12f2Tf+pPtsAXfqOix6fnP6cK4=; b=sB+rrEOpL54WdampW44yyDUHZy /9mdASCDCpHjJ2tgPujO8s1B2U4zWHZ6Mgd7H6+ciVR1ejQ5rdHico3GyKDzxI5XGVAStKOTQ+7Rv xZKUgWSYvfOTFOlGLmuXQykur2k9V9sdT4/G4lfoY/GqPKj7zVeWL5wBLf6iYLX+CStLCo+bpd6E/ D49ZYEeF6IiXw4VwR6snsY9u9+6SlUddyltN9jAXTOei5kEcH0zbdmmffShrVhHdqetoqDNqcEqmz nyrluvj6S8yl8bFFLNbY/4MWQUkBr/nz4BN18oLLmf7CZ+yIAaBGtlBPoEa8eM1cx+0i8fjzNWac7 btZ6VDxA==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vjG76-00Dpeg-3f; Fri, 23 Jan 2026 12:18:08 +0000 From: Breno Leitao Date: Fri, 23 Jan 2026 04:17:26 -0800 Subject: [PATCH net-next v4 3/5] netconsole: convert to NBCON console infrastructure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260123-nbcon-v4-3-46a5cf567926@debian.org> References: <20260123-nbcon-v4-0-46a5cf567926@debian.org> In-Reply-To: <20260123-nbcon-v4-0-46a5cf567926@debian.org> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , pmladek@suse.com, john.ogness@linutronix.de Cc: Greg Kroah-Hartman , Steven Rostedt , Sergey Senozhatsky , Andrew Morton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, gustavold@gmail.com, calvin@wbinvd.org, jv@jvosburgh.net, mpdesouza@suse.com, kernel-team@meta.com X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=5583; i=leitao@debian.org; h=from:subject:message-id; bh=JFP0hdML0vErS40bsyhMRJZeTqHHd/Fr+2NgT22nVIk=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpc2bqYiPFELtDGo1RKYA6A+Tn2X1aasZoRar1h 48E0kNM68uJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXNm6gAKCRA1o5Of/Hh3 bZnZD/92FSao0LZuRgXVwtd46R6DSEYocAUz8anZs+RNwmTyXYsRZmr1oN0NXp9XVS/r/Y4dZjH CW2Fz7QfMyibiSEQYLC1Jdlex8wQNAa8COArztuid4g3yqozWf7Y8uJ3EhDPmp6xsodPJIvsmwG sjn6bwKD8BQDIPdaA88mGUI9BL2AfyUoxfvsQ33mA1Rst42ZnVb0ilhG92eQdEaFW5q/TQgouJb zF+z5GMAcgzgGAA7jX0a64mtK1VI5+cgYQ1R6hGAaOYhpSJuaAF1HxUeh+/b4ckt/2iCSkVICYq /iTyrQTvZzD/JlcKcltwJ1L5ErwjE/hHGAkmu6NppsGfdPdaBTmdbhFSDzshNrxYelZdfbpjJbz mho2n3G2ceAIvfbzdgDUTy2GOIYsv7wb9T2fFriL+6fS+bse5mCicgT3l1MbxxNjpxlb4U5JHnR Ef+ZpX8GjYrPEyJ39u05yv0T4NmrS7ox6tpPDxoI8y4bU02b4oBqUZhjpDWMx67wBOQzK95MPLV w56mgE4sNltff+ZFJ34fbO46xampjEl7kIeCaLbPiNuNYWY2WZCkzkOvS9AgZwKjfEDN/bCn8AE eYlHTVQ0ZCYiTG5gSZ8mOQ0dMUNsI9IjED4qRjxY5BcDY+OrdmgV48A2LyXHur75lOAraAF+pOE 0mycIDVvQDNV0aw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Convert netconsole from the legacy console API to the NBCON framework. NBCON provides threaded printing which unblocks printk()s and flushes in a thread, decoupling network TX from printk() when netconsole is in use. Since netconsole relies on the network stack which cannot safely operate from all atomic contexts, mark both consoles with CON_NBCON_ATOMIC_UNSAFE. (See discussion in [1]) CON_NBCON_ATOMIC_UNSAFE restricts write_atomic() usage to emergency scenarios (panic) where regular messages are sent in threaded mode. Implementation changes: - Unify write_ext_msg() and write_msg() into netconsole_write() - Add device_lock/device_unlock callbacks to manage target_list_lock - Use nbcon_enter_unsafe()/nbcon_exit_unsafe() around network operations. - If nbcon_enter_unsafe() fails, just return given netconsole lost the ownership of the console. - Set write_thread and write_atomic callbacks (both use same function) Link: https://lore.kernel.org/all/b2qps3uywhmjaym4mht2wpxul4yqtuuayeoq4iv4k= 3zf5wdgh3@tocu6c7mj4lt/ [1] Signed-off-by: Breno Leitao --- drivers/net/netconsole.c | 101 +++++++++++++++++++++++++++++--------------= ---- 1 file changed, 62 insertions(+), 39 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index e37250bf495fa..ec000f477c2a8 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1859,23 +1859,6 @@ static void send_ext_msg_udp(struct netconsole_targe= t *nt, const char *msg, sysdata_len); } =20 -static void write_ext_msg(struct console *con, const char *msg, - unsigned int len) -{ - struct netconsole_target *nt; - unsigned long flags; - - if ((oops_only && !oops_in_progress) || list_empty(&target_list)) - return; - - spin_lock_irqsave(&target_list_lock, flags); - list_for_each_entry(nt, &target_list, list) - if (nt->extended && nt->state =3D=3D STATE_ENABLED && - netif_running(nt->np.dev)) - send_ext_msg_udp(nt, msg, len); - spin_unlock_irqrestore(&target_list_lock, flags); -} - static void send_msg_udp(struct netconsole_target *nt, const char *msg, unsigned int len) { @@ -1890,30 +1873,64 @@ static void send_msg_udp(struct netconsole_target *= nt, const char *msg, } } =20 -static void write_msg(struct console *con, const char *msg, unsigned int l= en) +/** + * netconsole_write - Generic function to send a msg to all targets + * @wctxt: nbcon write context + * @extended: "true" for extended console mode + * + * Given an nbcon write context, send the message to the netconsole targets + */ +static void netconsole_write(struct nbcon_write_context *wctxt, bool exten= ded) { - unsigned long flags; struct netconsole_target *nt; =20 if (oops_only && !oops_in_progress) return; - /* Avoid taking lock and disabling interrupts unnecessarily */ - if (list_empty(&target_list)) - return; =20 - spin_lock_irqsave(&target_list_lock, flags); list_for_each_entry(nt, &target_list, list) { - if (!nt->extended && nt->state =3D=3D STATE_ENABLED && - netif_running(nt->np.dev)) { - /* - * We nest this inside the for-each-target loop above - * so that we're able to get as much logging out to - * at least one target if we die inside here, instead - * of unnecessarily keeping all targets in lock-step. - */ - send_msg_udp(nt, msg, len); - } + if (nt->extended !=3D extended || nt->state !=3D STATE_ENABLED || + !netif_running(nt->np.dev)) + continue; + + /* If nbcon_enter_unsafe() fails, just return given netconsole + * lost the ownership, and iterating over the targets will not + * be able to re-acquire. + */ + if (!nbcon_enter_unsafe(wctxt)) + return; + + if (extended) + send_ext_msg_udp(nt, wctxt->outbuf, wctxt->len); + else + send_msg_udp(nt, wctxt->outbuf, wctxt->len); + + nbcon_exit_unsafe(wctxt); } +} + +static void netconsole_write_ext(struct console *con __always_unused, + struct nbcon_write_context *wctxt) +{ + netconsole_write(wctxt, true); +} + +static void netconsole_write_basic(struct console *con __always_unused, + struct nbcon_write_context *wctxt) +{ + netconsole_write(wctxt, false); +} + +static void netconsole_device_lock(struct console *con __always_unused, + unsigned long *flags) +__acquires(&target_list_lock) +{ + spin_lock_irqsave(&target_list_lock, *flags); +} + +static void netconsole_device_unlock(struct console *con __always_unused, + unsigned long flags) +__releases(&target_list_lock) +{ spin_unlock_irqrestore(&target_list_lock, flags); } =20 @@ -2077,15 +2094,21 @@ static void free_param_target(struct netconsole_tar= get *nt) } =20 static struct console netconsole_ext =3D { - .name =3D "netcon_ext", - .flags =3D CON_ENABLED | CON_EXTENDED, - .write =3D write_ext_msg, + .name =3D "netcon_ext", + .flags =3D CON_ENABLED | CON_EXTENDED | CON_NBCON | CON_NBCON_ATOMIC_UNSA= FE, + .write_thread =3D netconsole_write_ext, + .write_atomic =3D netconsole_write_ext, + .device_lock =3D netconsole_device_lock, + .device_unlock =3D netconsole_device_unlock, }; =20 static struct console netconsole =3D { - .name =3D "netcon", - .flags =3D CON_ENABLED, - .write =3D write_msg, + .name =3D "netcon", + .flags =3D CON_ENABLED | CON_NBCON | CON_NBCON_ATOMIC_UNSAFE, + .write_thread =3D netconsole_write_basic, + .write_atomic =3D netconsole_write_basic, + .device_lock =3D netconsole_device_lock, + .device_unlock =3D netconsole_device_unlock, }; =20 static int __init init_netconsole(void) --=20 2.47.3 From nobody Sat Feb 7 11:38:07 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 4C33827CCF0; Fri, 23 Jan 2026 12:18:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170709; cv=none; b=Hi686uq6yazj9MRMZPHmfD/bVk5lu3CN8UC7T6HxWZ+QTF0dFaZDZWKJbinjEAfs9GVKgtfiHkywR/4sQKbCQJFyLLuX1VlwlSj2MIhFxoUMm0U6HktXFmrJbhJ2/4yRBz+EJEyANpT3ZoFL3J7FoiM+FwLHXev9RBI0+KebOsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170709; c=relaxed/simple; bh=oPAzJBLvOA8QMqPPoTrISEQf0tyStoV6ELE7lGFXU68=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Yy/AJApNirpESAmQW0A+bp3Sm3SONUB8eN0G8BK5tgLbo0pWmV4PS58CWB+YxstkkSAhDEKuMrqnlllsLUVP34GI6OTQP/g1uat9ZErCG81Ucb3TPT9Kbf0z/4g8o16+r3tzBBzfG3Ql13jD/ucmyTti/qTGJ/u2sDIsY7Km/fY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=g4fCAO2p; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="g4fCAO2p" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=mc4iJBI5FWidJz0LsBfLELaGqmRUefTVuq5vataNfFM=; b=g4fCAO2pIyqYDCTt4T036TlqFk SOmE9aQdYJNAZwRtZ6//MLc1t6PVQoRMGwFcZ/c+yxY8WmsG324rc+lOErDn3ZQopNO+TQCToLIc3 nqbJXxnFr2J6nIomcvWbMDxCeQME+qeQL2rDdAH6VVhlMorYRjWrxmgRqQxym4AYNA4s01bbNg0fL yksSBKu5xN8Tjork0OzaUuIlskL/bsG9T8NEhy/KLV7AQ4+OV5FwG6lJgb/1o+jKvxhfIJJWpkxY1 0MMVRCyRe6SJvI3Q2UrxRpwy74bYjzZW5MTTBj53sk11PZacon2XTvBAusCkSq8+7HF7scySkLfTy HCOvRLGg==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vjG7B-00Dpf0-HZ; Fri, 23 Jan 2026 12:18:13 +0000 From: Breno Leitao Date: Fri, 23 Jan 2026 04:17:27 -0800 Subject: [PATCH net-next v4 4/5] netconsole: Use printk context for CPU and task information Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260123-nbcon-v4-4-46a5cf567926@debian.org> References: <20260123-nbcon-v4-0-46a5cf567926@debian.org> In-Reply-To: <20260123-nbcon-v4-0-46a5cf567926@debian.org> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , pmladek@suse.com, john.ogness@linutronix.de Cc: Greg Kroah-Hartman , Steven Rostedt , Sergey Senozhatsky , Andrew Morton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, gustavold@gmail.com, calvin@wbinvd.org, jv@jvosburgh.net, mpdesouza@suse.com, kernel-team@meta.com X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=4867; i=leitao@debian.org; h=from:subject:message-id; bh=oPAzJBLvOA8QMqPPoTrISEQf0tyStoV6ELE7lGFXU68=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpc2bqTGvRpjKUjezhMS9r2UtlOdrc6CGdnKAr5 kKrP+8rlzaJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXNm6gAKCRA1o5Of/Hh3 bT8XEACumQo8gZOYjUrfBsdi1wEMpcVtGNQYn094z5yv24cXRARKzNxvSWcEOseuqTj7xaRdOsd 8kAYzCZeyNuspx8+MG7TJ9rP98QNO0FMk4KC3uP8tkiYwJdVw6EGN70lcz6/Q686C652Zf+8Pwn tdvmCKu1L45HhuDRC8Tu1kjovy1nzDqQkEVX9ofkMV2LVfsiiHjOHY5871yyjiPNMuCbs0/K152 Jfu9TnBLHmVP+n/+uZNDu0n1t2k1T+TcVe9swLulXJPVjSBbtSlHzZm9ggMalzSB1SII1HiTcj9 hWtrXhvpMHZKRinvFjnYPwNqONrzBXzFxwdmqwhuU9eQb99FQv1DjPPT+PFc8Lrn7zsln4vf0kh rzTQ2R6EDwafTTcA/djIEmunwVehkb5mHdssjblCer0AF3UEb413vRhQq3defuzMV8R8SkxSpuv H4y8FR1qHLFvqu3ejgE1EGL8RZ2MCv4MF8YCEbKekOUi0QezVllE7IfQj5MblCvMwXqITtKno56 X4d1BR6PSQNXLxxLdUszBWQS33Y0QilGNS/i5uZLN77JxpkpuAgrbyzkmQwNQLFgnAuLzBE4n/w qSwzyrxdD6jK8mh50PtTGf2E1d/11PBZKTTrXa4qmezjDV9X8z4XZOZ5DFlTr/S5xnGBd1apdrh pXpvNPRosNO99Gw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Use the CPU and task name captured at printk() time from nbcon_write_context instead of querying the current execution context. This provides accurate information about where the message originated, rather than where netconsole happens to be running. For CPU, use wctxt->msg_cpu instead of raw_smp_processor_id(). For taskname, use wctxt->msg_comm directly which contains the task name captured at printk time. This change ensures netconsole outputs reflect the actual context that generated the log message, which is especially important when the console driver runs asynchronously in a dedicated thread. Signed-off-by: Breno Leitao --- drivers/net/netconsole.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index ec000f477c2a8..0f44ce5ccc0ab 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1490,18 +1490,20 @@ static void populate_configfs_item(struct netconsol= e_target *nt, init_target_config_group(nt, target_name); } =20 -static int sysdata_append_cpu_nr(struct netconsole_target *nt, int offset) +static int sysdata_append_cpu_nr(struct netconsole_target *nt, int offset, + struct nbcon_write_context *wctxt) { return scnprintf(&nt->sysdata[offset], MAX_EXTRADATA_ENTRY_LEN, " cpu=3D%u\n", - raw_smp_processor_id()); + wctxt->cpu); } =20 -static int sysdata_append_taskname(struct netconsole_target *nt, int offse= t) +static int sysdata_append_taskname(struct netconsole_target *nt, int offse= t, + struct nbcon_write_context *wctxt) { return scnprintf(&nt->sysdata[offset], MAX_EXTRADATA_ENTRY_LEN, " taskname=3D%s\n", - current->comm); + wctxt->comm); } =20 static int sysdata_append_release(struct netconsole_target *nt, int offset) @@ -1522,8 +1524,10 @@ static int sysdata_append_msgid(struct netconsole_ta= rget *nt, int offset) /* * prepare_sysdata - append sysdata in runtime * @nt: target to send message to + * @wctxt: nbcon write context containing message metadata */ -static int prepare_sysdata(struct netconsole_target *nt) +static int prepare_sysdata(struct netconsole_target *nt, + struct nbcon_write_context *wctxt) { int sysdata_len =3D 0; =20 @@ -1531,9 +1535,9 @@ static int prepare_sysdata(struct netconsole_target *= nt) goto out; =20 if (nt->sysdata_fields & SYSDATA_CPU_NR) - sysdata_len +=3D sysdata_append_cpu_nr(nt, sysdata_len); + sysdata_len +=3D sysdata_append_cpu_nr(nt, sysdata_len, wctxt); if (nt->sysdata_fields & SYSDATA_TASKNAME) - sysdata_len +=3D sysdata_append_taskname(nt, sysdata_len); + sysdata_len +=3D sysdata_append_taskname(nt, sysdata_len, wctxt); if (nt->sysdata_fields & SYSDATA_RELEASE) sysdata_len +=3D sysdata_append_release(nt, sysdata_len); if (nt->sysdata_fields & SYSDATA_MSGID) @@ -1831,31 +1835,33 @@ static void send_msg_fragmented(struct netconsole_t= arget *nt, /** * send_ext_msg_udp - send extended log message to target * @nt: target to send message to - * @msg: extended log message to send - * @msg_len: length of message + * @wctxt: nbcon write context containing message and metadata * - * Transfer extended log @msg to @nt. If @msg is longer than + * Transfer extended log message to @nt. If message is longer than * MAX_PRINT_CHUNK, it'll be split and transmitted in multiple chunks with * ncfrag header field added to identify them. */ -static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, - int msg_len) +static void send_ext_msg_udp(struct netconsole_target *nt, + struct nbcon_write_context *wctxt) { int userdata_len =3D 0; int release_len =3D 0; int sysdata_len =3D 0; + int len; =20 #ifdef CONFIG_NETCONSOLE_DYNAMIC - sysdata_len =3D prepare_sysdata(nt); + sysdata_len =3D prepare_sysdata(nt, wctxt); userdata_len =3D nt->userdata_length; #endif if (nt->release) release_len =3D strlen(init_utsname()->release) + 1; =20 - if (msg_len + release_len + sysdata_len + userdata_len <=3D MAX_PRINT_CHU= NK) - return send_msg_no_fragmentation(nt, msg, msg_len, release_len); + len =3D wctxt->len + release_len + sysdata_len + userdata_len; + if (len <=3D MAX_PRINT_CHUNK) + return send_msg_no_fragmentation(nt, wctxt->outbuf, + wctxt->len, release_len); =20 - return send_msg_fragmented(nt, msg, msg_len, release_len, + return send_msg_fragmented(nt, wctxt->outbuf, wctxt->len, release_len, sysdata_len); } =20 @@ -1900,7 +1906,7 @@ static void netconsole_write(struct nbcon_write_conte= xt *wctxt, bool extended) return; =20 if (extended) - send_ext_msg_udp(nt, wctxt->outbuf, wctxt->len); + send_ext_msg_udp(nt, wctxt); else send_msg_udp(nt, wctxt->outbuf, wctxt->len); =20 --=20 2.47.3 From nobody Sat Feb 7 11:38:07 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (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 3B8B32EA48F; Fri, 23 Jan 2026 12:18:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170721; cv=none; b=bpovezRK+fswVH8e6a45qdejFkzUTqq4fjRY6wm6Urci7n3KAF6cusmWuWICXl0f4R/Dwn+Pa5UCzgU8O3E9qfYzRO4yk0s3Yx9B6Lwvhif+wS3Ma1kmGElec8BRJ/kqEqVcmDI4w2tWMNRqlsDl7IIca6UIMzrWT2F5yT3vwZU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769170721; c=relaxed/simple; bh=dvHwqxrLBLwCTlBxNIo+6k7Ecmhf7CkQ7kkK2Nih2fs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DahSp7kcabqremmVyGnPIttpwvfeVmk/Y4mJsHpeEg4fcPgygUCAh+NiUZVmCoWd21h4CGzifOxhq24zmRS0hIARc+Xd1+1dQ+pX3vr+4xrrYJ87AB55npqx9mbSQsByM5MYNg28F2Ge+y1LV/ueLQvSZIuKT0fULe+eiK1A82s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=none smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=Gk/+q+sx; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="Gk/+q+sx" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=XOMQs7uBcrIY8f02bUmgzj9wshp3hn8MD7+FpRXarZQ=; b=Gk/+q+sxp8BS2Ac9nq89sptlkD 00QSVstIPT3rSMUgWq/bYVjLdP47AuLoDSv+RolyM0tP/vX3xBpl7thHnvQb1ZXVrJzTvUro0GLsa rz+I2N8lRCWrIwu1CkWiFgniRjPefFwkE0YhN9G/PjZDGkCOILFBwg0qCX1Ep61j3Z9eOwYT5xjbT S4WH8mjY8olhO6g+8Qfw3pFlEVtZB8oNlY9LoEcTiSGkJRA10f8FeKB0Sep+a1uSTKb5i5iD/dvt+ 4ORoeRDnMrjetz9iyLmyix06gBXNmzSLi38lg0oPXFVY5e6fuCtz2m9J33Zuv1XUsBiQl1PVO9Kc5 My9Kh6Ag==; Received: from authenticated user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2) (envelope-from ) id 1vjG7G-00DpfN-Np; Fri, 23 Jan 2026 12:18:18 +0000 From: Breno Leitao Date: Fri, 23 Jan 2026 04:17:28 -0800 Subject: [PATCH net-next v4 5/5] netconsole: pass wctxt to send_msg_udp() for consistency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260123-nbcon-v4-5-46a5cf567926@debian.org> References: <20260123-nbcon-v4-0-46a5cf567926@debian.org> In-Reply-To: <20260123-nbcon-v4-0-46a5cf567926@debian.org> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , pmladek@suse.com, john.ogness@linutronix.de Cc: Greg Kroah-Hartman , Steven Rostedt , Sergey Senozhatsky , Andrew Morton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, gustavold@gmail.com, calvin@wbinvd.org, jv@jvosburgh.net, mpdesouza@suse.com, kernel-team@meta.com X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=1528; i=leitao@debian.org; h=from:subject:message-id; bh=dvHwqxrLBLwCTlBxNIo+6k7Ecmhf7CkQ7kkK2Nih2fs=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpc2bqXrY/3mib53itDkUm5uPhwNKOQR3cLoIad SG5B+9jtJOJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXNm6gAKCRA1o5Of/Hh3 bVTMEACUNdjtkxJNGvvRIg4uwJndv3BotXB6Gn220gsshi43CbiagGl3I0a1Eda6Tpq8JNLFa/e DbdObDuQbLl0LaeGEx7ukgAM3y8wdHGKsHiYq5Gbkc5sJZEIz4EYryDcD4vTdN0iCYp51IKIFrK m4JPXTyMTewPLqdVxlA93nG9RfdlSVDe/Xh4T+uYhHF8rYCG0clqgt7/us2CDvMzG8ATTIJzY/l IRX7R035D7/VGdMZiT06WEi3xV/rK0trJPeWk6kRMFHFfbhtmLRCAe9RZ/c+XBiBNdxo/Fd0dSe iMNe6gBQVi07BIxPwU1sdOqjBnUQlM24/XcWy3B02K4PuTyP1mlbDd30zYqugtnSJTIndQJPXZU 7McHXkjNTtAIzjJz67hE9/Ud25pMePCPbwFFw/WrHjOyNlWssqnIEOxPaxKf7vQjqjrHz4MUoxM tgh+Yp8WRcxCZ24kcoRCRt37/tqF0SU9ls6yeTbJayT/tKP7f5d8J4bvpWzqCaDIfuYyVkR5ZSB 7uWf+UB0hAjZTGUqVLLk/10tZGT10sV9FeloRdL0WatkguXOYJORtw3+mxNpGvuhfK2/tgBTmEo ursckJ7jFQFElzFKDdMTdu4bRFWj7/jA6ly3vJ3AkpiJ+Q1MP8XTp8zB6sBOgesFIsuuh0tzZMa qhKAWw+xdJzaElg== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Refactor send_msg_udp() to take a struct nbcon_write_context pointer instead of separate msg and len parameters. This makes its signature consistent with send_ext_msg_udp() and prepares the function for future use of execution context information from wctxt. No functional change. Signed-off-by: Breno Leitao --- drivers/net/netconsole.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 0f44ce5ccc0ab..d1dadb7e0350f 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1865,16 +1865,16 @@ static void send_ext_msg_udp(struct netconsole_targ= et *nt, sysdata_len); } =20 -static void send_msg_udp(struct netconsole_target *nt, const char *msg, - unsigned int len) +static void send_msg_udp(struct netconsole_target *nt, + struct nbcon_write_context *wctxt) { - const char *tmp =3D msg; - int frag, left =3D len; + const char *msg =3D wctxt->outbuf; + int frag, left =3D wctxt->len; =20 while (left > 0) { frag =3D min(left, MAX_PRINT_CHUNK); - send_udp(nt, tmp, frag); - tmp +=3D frag; + send_udp(nt, msg, frag); + msg +=3D frag; left -=3D frag; } } @@ -1908,7 +1908,7 @@ static void netconsole_write(struct nbcon_write_conte= xt *wctxt, bool extended) if (extended) send_ext_msg_udp(nt, wctxt); else - send_msg_udp(nt, wctxt->outbuf, wctxt->len); + send_msg_udp(nt, wctxt); =20 nbcon_exit_unsafe(wctxt); } --=20 2.47.3