From nobody Sun Feb 8 13:10:36 2026 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16F4844B686 for ; Tue, 20 Jan 2026 18:24:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768933487; cv=none; b=T+Azj/FmakWQUWRnQAw7iFzI8B2tdHpj1FLnwpO0miodXjxc32carGkIt519sojJqwEHLAATLA+vDpocd13FTDuhuGjFM46pBw1H+gCADZVzfVoj7ts37Epdut46mDdjKgXTOkCQewr0o7wqIF9SUziH+prrEuxc3qRlDgHrVMY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768933487; c=relaxed/simple; bh=uhMN5SDvwZKz4HUOAWprEN0emQee+wLZlPBbDgAYD+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lzBUodBddqll/f7di59DDhhAanlpr5OblZNVx3U5qSIZVpDP4Es+vbkGVLZEqzbEPRgONe/JN7+su1mm0VpgKoT/wpxkC9CoW9qQo6wqCY9boY2fOHUpR6i2wU13hVBFPnX3lnCIwLetKui0KUBhYomRIG3odnyAZswrEkudQ9A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.222.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-8c532d8be8cso533572985a.2 for ; Tue, 20 Jan 2026 10:24:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768933485; x=1769538285; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QtgxYc8DWWj4JDK65TWyeuo8xjeUjjmBnOPjo+S2drw=; b=Ua/gWuAE0p94/PbaCRhVtcTQRy4aB6ATSiHQBIc0A3taC1Y7KdeuDVr4NZfYhCjz4h T7wJr+vLPs2qEgGElcloYU6ATrnt9YRcBIHk78TsRqATwHOxdQ4fMyDQf9eQCBorE4ol nkHtNmASndkCNHLHhje4GDYrKXNNs0rmS/W06EWFC7cehBWnAVwfrwQ2sYQRjQSaclwG EhSuR9h+CtHQuAd2t2udjJ5yh2TVRKMZSD6n6sPKefQwjPGHdaF0OaoBuHLACA5E0JO0 ejgYL1tAJpHDCvU1DQzkFagDDF2PceLj61P3ely1sHGUBRTOXx+gag17kFNMwjx80rjq bIqQ== X-Forwarded-Encrypted: i=1; AJvYcCUhmp8aguRzC9yviDflMBMuOKCoicW9cuumF88kk795F/smSaPVtZk+1nNxTZ0SdeiWXIJyep5CSsWErQA=@vger.kernel.org X-Gm-Message-State: AOJu0YwISJaM4LmzagkzAhtsHH8H2nnhTYtwlrtaopa8wTQDqrBwEKCp 97+yLMzXI9VwTCSGMBtwfgcFfOAhTquHUtXdKkJ+bRZiuKNynhbhmckmqFDpjA== X-Gm-Gg: AY/fxX7GzzVRYQwdRDVSH8PD2Gy7SQk3HPokCivd1IBCdNSewd3dnR82+qlhdogrVL5 sVdZjSWaOqn97AuFS20Dx+i7uB3qMhfsHNYGKPxevfhVjE4xfs6rMRAfRETBWK8Zyx8cFXWTvOu 4zxp24tbAnnVjyTgb2YXWukAIZHi2ZifyYUgsu/CW+huvtM2ERxrq/mZYYj3w/suGs8aUSmmgxh DpXWX6hxVmTKau5ELhW538as8+AFgiveSnr4XiCMBQMPJYtSAcjTGHiIqkwyXoOTejK2KiWjJnA e4KB+Su2UgAxqE5jq0VKYjm/hwVRyed6/0yKeClbdLl9JFxv21Hotsb6boHzx/vzmV+nwZnkYO7 L8sMMyk38rKp7xOAmvZ0vj9krhdw8OQ+lnGB4FyD2QqhUb6kK/XyvfRwMN4+W29BdQeasjGM6GM 1f X-Received: by 2002:a05:6830:3744:b0:7c7:690c:8a80 with SMTP id 46e09a7af769-7cfded44fa9mr6579427a34.9.1768926245620; Tue, 20 Jan 2026 08:24:05 -0800 (PST) Received: from localhost ([2a03:2880:10ff:5::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7cfdf28ef44sm8865220a34.18.2026.01.20.08.24.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 08:24:04 -0800 (PST) From: Breno Leitao Date: Tue, 20 Jan 2026 08:23:47 -0800 Subject: [PATCH net-next v2 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: <20260120-nbcon-v2-1-b61f960587a8@debian.org> References: <20260120-nbcon-v2-0-b61f960587a8@debian.org> In-Reply-To: <20260120-nbcon-v2-0-b61f960587a8@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=9280; i=leitao@debian.org; h=from:subject:message-id; bh=uhMN5SDvwZKz4HUOAWprEN0emQee+wLZlPBbDgAYD+4=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpb6wiwrhHlnYabC1yTvrM1KVwgr+iv/GVWDHYM sd7IDRnDGCJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaW+sIgAKCRA1o5Of/Hh3 bbyBD/0VCaiJBo5QXkxWDoJGYYoqA910sbr7HZqiI0UfSg8QKFYFFmWJOAucqFFdh+xJzeVkKbK 1sCFQDhOPTntTHNYOcY2Dk9yJEJRWjGs6gVXddm+m9D0rUdlcTz5CKatZrq2BPx0U9nlnqBoVVN lEnJO+XRdgcBxPl8hRTyU8ww0FVQqqIkSusd1dkr9YCfYmPpnELfYezeUJj0n9dFmCB47Z8m1Y7 nRLgbcsfZEJ3kx1xYU3XT7bUBB+P80rxeCMU8qtDWpYlKCg2SthkWryjO2jaYUSnlpon5dABfAf z9strlni9WgTzhB0pQm2+WIcWproMAGljxyMeVJxyTy7qs9SQ8aW07bIb5r4WPt+Pzlvtv/JaDl OgK9Z/oELQ2KFc6lddXfQCX/incQcWnP8HYGcPEid+7F8oRfNH8AxAwd4dkak4BgoGSUHwVj9Cc CVoTjtuHLryfGIGfcz4OTrnCpER6uz7L3o832BPTnM0M3JoWK/lkY8aw8JZ4PqI37kBhFTiE9wy c4xyTHhRAFLtZ8cmb1TPcXXjKsDlalT+gb0SkBA4iSjG6vyqoiwlKM3w8VO1bbEzLiZ5JlWa3MD LKaNBZWj3HGNq0sRvvwMJN//9ypH1iUv2Bo0tmPq7AVOM5OHA80xco/JZkfpBjfQ4+u53OIl9OF zC6VouwQ5P9f5cQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 | 1 + include/linux/console.h | 8 ++++++ kernel/printk/internal.h | 8 ++++++ kernel/printk/nbcon.c | 15 +++++++++++ kernel/printk/printk.c | 52 +++++++++++++++++++++++++++++++++++= +++- kernel/printk/printk_ringbuffer.h | 4 +++ lib/Kconfig.debug | 20 +++++++++++++++ 7 files changed, 107 insertions(+), 1 deletion(-) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index ac12eaf11755d..12e47cb27ffa5 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -341,6 +341,7 @@ config NETCONSOLE_DYNAMIC bool "Dynamic reconfiguration of logging targets" depends on NETCONSOLE && SYSFS && CONFIGFS_FS && \ !(NETCONSOLE=3Dy && CONFIGFS_FS=3Dm) + 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 3fa403f9831f0..c2b3c4d2146e3 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 inline void wctxt_load_execution_ctx(struct nbcon_write_context *wc= txt, + struct printk_message *pmsg) +{ + wctxt->cpu =3D pmsg->cpu; + wctxt->pid =3D pmsg->pid; + memcpy(wctxt->comm, pmsg->comm, TASK_COMM_LEN); +} +#else +static inline void wctxt_load_execution_ctx(struct nbcon_write_context *wc= txt, + 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..8885e8e7753fe 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2131,11 +2131,38 @@ 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 inline u32 printk_caller_id2(void) +{ + return !in_task() ? task_pid_nr(current) : + CALLER_ID_MASK + smp_processor_id(); +} + +static inline 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 inline int printk_info_get_cpu(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_id : caller_id2) & ~CALLER_ID= _MASK; } +#endif =20 /** * printk_parse_prefix - Parse level and control flags. @@ -2213,6 +2240,27 @@ static u16 printk_sprint(char *text, u16 size, int f= acility, return text_len; } =20 +#ifdef CONFIG_PRINTK_EXECUTION_CTX +static inline void printk_store_execution_ctx(struct printk_info *info) +{ + info->caller_id2 =3D printk_caller_id2(); + get_task_comm(info->comm, current); +} + +static inline 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 inline void printk_store_execution_ctx(struct printk_info *info) {} + +static inline 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 +2368,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 +3051,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..bf5b23a0bf54e 100644 --- a/kernel/printk/printk_ringbuffer.h +++ b/kernel/printk/printk_ringbuffer.h @@ -23,6 +23,10 @@ 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 */ + char comm[TASK_COMM_LEN]; /* name of the task that generated the message = */ +#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 Sun Feb 8 13:10:36 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 306C644A71A for ; Tue, 20 Jan 2026 16:24:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926249; cv=none; b=rwWr4hRcv+EaAHa2JDSVZ29orVUlqVpfbgXUUz26ErD5CctUqRzgUm2DY8h98T974jTwHGFVhjqfIy4/mZIoGT0xTNR4NvXfdURxsXzTB8J1IhXSA2yJ4bJtEgeqFcUti1cH8wBIzPqbSydW56FPIUxh1arv4v5UtHzISCkOF+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926249; c=relaxed/simple; bh=Hz1gu3DrXXHFmq3h1ZTNOZftr7Xlzo3ths2B7ZsBtME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XAywhPUPRsnaiVTblnYME/6XIvthywiaU9TTz1tGdShLUyYK6BU9MQY2zfBTPH9I6GYs4zZxgYTy4zD6H7/wF7Gp+m4U6j1fM8bDTBjRdDhdu5x6CeQ8NPoyVC9eP3K5Dx/Lzjhc1KfBZ/WSq3NfBPrhhVPYxs5xEFC/6iL2nko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-7cfd2423793so3836502a34.2 for ; Tue, 20 Jan 2026 08:24:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768926247; x=1769531047; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mHAlKWdigu/dpowmiGEPP+hWTchneUXrrcu0qUva3LI=; b=MgNC91yM1jNIRylR4t/i2HFdZLc7eQx/tXO2G35HU+1y0LhePAtpQ59YowJ3YEPmML gTbEQCHftpXt9/kz2q7PK1paPUz9+EtQBIojAX/zG9wXzUrC3pQoucidABYMtF1cs5bq UsEGJpV/FiMnyyLR1qhn6pA7nfMoPRz4OujtkeQgV7FFGsSi1Dpw9gmAyjS7DiDDaFhd Sx+cW+RbDmpwS03canXPY/na6gSAsbwMxNe4l0c53cpVVGLmElINVcRM2E2KHZgMzfEN HHN/JgRO4zmRn4/JZ5dG3bTQ6UsGh3bNTjf22VCA/HgjoRf0uaIx4rIroaiqS9yziuFX 2x5Q== X-Forwarded-Encrypted: i=1; AJvYcCWbLxVQBA2lk/zUIJuCxSyouAGRNjsHFtiNT+wimakIIH3/Yu7yRWs/lxxPznYatEl+QE9Xc04dH/8POEc=@vger.kernel.org X-Gm-Message-State: AOJu0YwF/6zWxU4vUpRWoaiXuM98aSvfbhM6NkNUSVs/oL2i2a/nvY3t QrhaKJBHqdiCIV3ThestP5OII+Mc6dabeXVnzJmINEOfa4/Rz4QsQWUn X-Gm-Gg: AY/fxX5cEJSKkj6bDRFqqGYn9ABH75fVJ7GBWsomn0NODPAjH60gM5LpeN0vsJSPg0q l2qfJHrirf3615GyAbuZK3jEi1NknEZ8RSiq+Ey47EgIFevBuPJ7fE8Ye3doepP/u43e2R+KhOX LTEhRv0OW1iJG+VAoABg5l1XYxPmkFbFUoxpIDA7e4tMoY31b00o92Ck6gu1smS1IPPmqgJN7Al H3cDRsncBCdqVPdYqJ4cippVFEOGtxyBiEGFswsgwdhC1QouDEIFnrctjZ09Fsb4+x9EZ7UG6i6 75CdNfdyJl+T3Db/d58G1NwF6VaWqLi5d6hCqvJWZviLsqumyOpuFyTQhcrMRjb2ElrPhoHsQtr UHHkwR+UhJAQ0md/314YYmEZ+DC4OqlEY05VW7ApwSXNUpeTC7gXzq62jCLuJPzUBsULPdR4qdV gIOQ== X-Received: by 2002:a05:6830:6d1b:b0:7c7:6043:dd93 with SMTP id 46e09a7af769-7d140a53feamr946309a34.13.1768926246958; Tue, 20 Jan 2026 08:24:06 -0800 (PST) Received: from localhost ([2a03:2880:10ff:5e::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7cfdf2a696esm8726514a34.21.2026.01.20.08.24.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 08:24:06 -0800 (PST) From: Breno Leitao Date: Tue, 20 Jan 2026 08:23:48 -0800 Subject: [PATCH net-next v2 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: <20260120-nbcon-v2-2-b61f960587a8@debian.org> References: <20260120-nbcon-v2-0-b61f960587a8@debian.org> In-Reply-To: <20260120-nbcon-v2-0-b61f960587a8@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=Hz1gu3DrXXHFmq3h1ZTNOZftr7Xlzo3ths2B7ZsBtME=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpb6wi3TDiQTF9DJsNQ9QEETZt6lE5D6Vdw7PNT gthtjl4HuOJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaW+sIgAKCRA1o5Of/Hh3 bax6D/4tsqHXFVNND9tXUp/J/V26ws2Cbx4cKuDdSMTEXoz2sHCt1Sp3Cs0HTPr2+xuTKxsnZ7S 5GKKmW/XRRd8ac05Ip8u6XmRktacbAqISPyX/vDZBXqlmdgYarZ/5C7qrsm4RWIS74yG3wytKoB BMj48ACCD+7hISk6kvuEibEHKhFvMNOrHP/CWRZVU/8RdwjOH2k3ApqE6/WGoaIe8s3oV+CL8A4 GI42LqfsI4pa4OAX3hz5lVIRqP5ClExWc6NWbOrZU6J6QqryOe68CY8y+hAfw0BXaxvqM2GtZFh YcNyreegZG3OgamqKC8NpyoMm8mVGm3gnzmI/GWYXzCPvwL3s4JjD7xj9hF5U4nDkXNdkoY7JyC zv5ag/wP5gexMc7ukhVxIXf07HQcadyA2dCTOPu1YsVGzGDx1eA+xTOaa7fEfEWfYN9E/ZHfObs 4pt/50J8/5CBjfNeruZBMMfJ/7sEOJKauEqOVy+9KIco13r31HchkvSOs1cr3lNRDnl/U5K0+FQ eKVW5Dx5sxykORH9Xjeqfjp6uoTtPuNCtoUKbL4jGlYjRJS7b1XaKdvfjeCLHsNNZMYW7iQuPY7 pYoE8+VWKUA8hF8NvivNuoLZSTT4Uu4k60btYF12u/ACr39ilH6NTv+Mpux1LbD1mFNaJblG7Uc P74A+PTee6APNqA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 9cb4dfc242f5f..dc3bd7c9b0498 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1725,12 +1725,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; @@ -1747,13 +1759,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 Sun Feb 8 13:10:36 2026 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D4870451044 for ; Tue, 20 Jan 2026 18:16:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768932973; cv=none; b=RiMqkfpkgf9TgtWpkU/Bk3czXIRtPOhwNgy4pjp3Hj6fB0gfynrMTF1/amS2SUpvozNOS8q7tWwYQGOHMjnkIGydiiAs2GT5zvDARIHSAE+pLENBShKl9d9LljiIwM3uuuchhjp6i4iZum2PmJCH/peZLdjiGKUXyUar9thRS8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768932973; c=relaxed/simple; bh=URguZv+z+GzFNe+cJ2zMPSHRjgwbLnOTJ/PrC+X4qs0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r6hVzY7fjSHgBz5hrloKPDYAWSB2Zmrv8fY2wZFSpkfufER8ITpYwuGqpWctMrcCqfQjU+Fxjx6yt98dMN/HITR65ppuCEE5BKCVY1hFdCvlcfA+1RoK5VB3j2H+oR7WtVZJRkWcMRIVgFJJn6D1fTnsvJbFxFj7D9LwkbDd9JE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-81f416c0473so4851455b3a.3 for ; Tue, 20 Jan 2026 10:16:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768932971; x=1769537771; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=04o5YPIM/ynG9CDHLB19er8qSsbuftkYbcHCNFB6R4Q=; b=Lr27ljtx/7iVJo1CPMegjFsmQCEHg0M6Krker23rzeU7e35aP92xdl6dy7qAn1SqIc Ee2kOgS9REgHQ4yaGfqs2VNnySfDsHX3YVh0pWzxuid86px9ndddUc5eRR8KIcNc7a+5 0H1G9/cePTEn92AkNpJiyaLcmKzn3IsDviKpo4kYZRkkkak9K+wDlxGWEf9cxLTm3/5o +bRPN5VLaWkmr+1wcLU6IG1r60+aK6DZ7Qd767/ybIsXGmaZygyDGTELvGdbeutLiz7b Vus1B/mqQwEpKwYvk7T5iVQXeUg+eDhGBEuyBid6/ue3SppBm2PDLiXEo0FlcjkIFT5/ gggA== X-Forwarded-Encrypted: i=1; AJvYcCU2IjCg4jFX3yqQjQwAIaafVACsBGzpmpkV0A9ElVjltCJa/r/UT4N8IYSPCXGPyupsdPQ43fwZc9kETa0=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/dlGR/ZjhCh2tLaEnLesKaF9JuXjBrn3sKuVsvCiJ4WH6lXfR NVfHnHY89O1u013anqBx0z2iUuWCiYbZ8NAwhSiDlWPYADphlkrLsfrQNfbQqA== X-Gm-Gg: AZuq6aJF46+0bR1iZc24W7y3+08OjR8gwYtxydjpAJamaIw0yQN2HpVfNBWiJhqrkTM lI1G7qR7eBCWW6jLOaUuBH+C25rLWHCkTa32zXdZ439H6m0ZgpAXhfDy6WgD5VPd02cYe3eKHBK YOVuOLYSMpEwyxVam8RpzdHq3dmX6YnFU2ztYUKu/H6rKdZfUJgV6QWsoVrDrdZdFjuX3aoKgCu gocaUsIObD3ojq9oGnL6jjrNrupvd468L2a5owrzCZh52hgtCs9fIN4NX4j3faFbM4rewxjbGM2 /ffW/H3Ya/F/CZQ0Z7sG/dvOkIhKG3FJ5W9RFroJTbW/RnThuF2xPXeXBNvhlzKFwI+nXL8hFE/ Uyul+4945c4nEfl5dsuuF3GelvSlYHAUZisYCL8oqp4kFM8CW+/fmXwgqex+zkxyavTZHvruJQx STxg== X-Received: by 2002:a05:6808:bd1:b0:453:7a2a:62cd with SMTP id 5614622812f47-45e8aa74004mr810527b6e.50.1768926248216; Tue, 20 Jan 2026 08:24:08 -0800 (PST) Received: from localhost ([2a03:2880:10ff:53::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4044bd5b00esm9168566fac.15.2026.01.20.08.24.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 08:24:07 -0800 (PST) From: Breno Leitao Date: Tue, 20 Jan 2026 08:23:49 -0800 Subject: [PATCH net-next v2 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: <20260120-nbcon-v2-3-b61f960587a8@debian.org> References: <20260120-nbcon-v2-0-b61f960587a8@debian.org> In-Reply-To: <20260120-nbcon-v2-0-b61f960587a8@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=5459; i=leitao@debian.org; h=from:subject:message-id; bh=URguZv+z+GzFNe+cJ2zMPSHRjgwbLnOTJ/PrC+X4qs0=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpb6widhBlttuzOawbHxAveWRni5+IZPIISE4jr 8QIE6VCjaCJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaW+sIgAKCRA1o5Of/Hh3 bWNTD/97j5o5CuRXZxOvUp9rq3WeHpW32Bs2KxnvW29M7PYhsa2Pw/c+NyqFAP0OxkfxHxeLwX+ BbBe5OlpBebjbryO0kzQdXnNlOpolQanFpaNExqtnqdqWpvhtO3DvtEefBESftjwQemUg+QCjPG aA3bpuILcNA6YZOTa10lBD2doTuh7wSO9OcWTc6ywxHwXkRdTYE9BoR3eCZ3ElVXw8V0MA9O65o PN/wcDm1njBNl+Y2h7Gs/fZDuM6mZPUJEVo5zIB02sPwv2Jhj6Jd7QZ4DgtIUlMm03n9gOwKSj2 wZEOS/XSDrTSaiFs8ZPypV/s0oHM5XVHcGsNSlu8k1qrxYgS5xLW8QNs+c+urFD6pm3nvIt+BbP YLA7RdiUYVuP1zWQHguMTm7GrLvGK9VDFsc97fn0y/OQIjGP4C/IY3uRM+hHaSRmnfaL+J5ndku 1B/OslgDhCOK+r+2wrIaGFIUpRLpSm4D/H1ucPT8LR3Nvb6ksGFvfg+F/nqnWZNToSH9uDlMA08 n7CIf0tfiWkFf/Ey/hbcGejXtQ090KBnScZyxPExEEnZ28WnPMEibrBi4Bo7JhOykoaGlsg3jpI Qzz2tMQnq+hcJ5zHsmJQwqcxuUkbxKcDIDL6VH+g47UBWRrZ1E3vneiHumEJ4WBU59teLt/VlCs zKTK06U/ezAuV7A== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 | 97 ++++++++++++++++++++++++++++++--------------= ---- 1 file changed, 60 insertions(+), 37 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index dc3bd7c9b0498..c5d7e97fe2a78 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1709,22 +1709,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->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) { @@ -1739,29 +1723,62 @@ 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->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->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) +{ + spin_lock_irqsave(&target_list_lock, *flags); +} + +static void netconsole_device_unlock(struct console *con __always_unused, + unsigned long flags) +{ spin_unlock_irqrestore(&target_list_lock, flags); } =20 @@ -1924,15 +1941,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 Sun Feb 8 13:10:36 2026 Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC1E644CF29 for ; Tue, 20 Jan 2026 16:24:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926252; cv=none; b=skoEwiojzaLhQcp4jJKWL+bTbuN2OYX2owVi7ktNWmlAzx82QeGRGTAzo/wjLUrPVueLVf3KFq91otlI4vPv7bFADukpi2QcYnnuQ127v7J/INBZ89IA+FflUhW4bAXsb/cD5YNtshwXc4anTZBNgKhkQeqki1RANlgL4nmPBwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926252; c=relaxed/simple; bh=C3+2SHjtQfzMU1QwJyHpzEXry6g/X6KazovqMtfAam8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jCvX1jL+UAgEUiwlEBtjYTXscIs2tzSb++95KoIR0pPvqKh67Ja4qguO7H7mF3gzc9cCSUi+3QOqYrjyvQYU5f7EB8Gelmb6+IHQgLMfudW4a4MaFQntUDyvNTtpXXLkHszpyn6/xhAkt5FFBMJ6FxVWBJac8xv/bicmOXWAEJU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.160.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-4040996405eso3565043fac.2 for ; Tue, 20 Jan 2026 08:24:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768926249; x=1769531049; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=BBdNkb22LXPO27vypR+xRQjGktOBTrzdp6bLqF4/Fms=; b=VJOwsC7hVwk9spDdiKeDVtMItZwQI0JEnVBxh5VL7QBEoM4xpmEZ5obfZZaICTY8k6 DC8hV9CT/RWNh606R/f8MZgtfDQBTIkdnRFvc007/G6l9PMYVcnPUH6D8Lpouv87DXWi 9veRsBK6JpSCDEoEruiR/Cud8fiiwEr/jCLXLyNehcQ14g2P4UIUAAvtzQ3+K0BiwBhP x40sJXm7ItFsv421XrOezlpt6tdKOZQfkGQ0lBzeoHVPDMaiwrJRFGqfEm4MtwwHc+hf 3yHonfnKUXh/scZ11R6KVLUCVOVNrlpZ8O+mQiteVnPbH6Q5adYgYYRbg0TmmK4+GnNM Pd5Q== X-Forwarded-Encrypted: i=1; AJvYcCUhYPZ4nkLFiHGzzyiiunj+ZZ0Vm3iDdwDNzOmaq603FbibOiZXKyGuCRPkZ4HgiLZjroxzWYvuZujagQc=@vger.kernel.org X-Gm-Message-State: AOJu0YzhpBkoCekOn+FtAnPHd28/mkyvot7yKcatDd2a7w8L818UjAm2 EXFe89DONlI7EX3dWskmKzJPMayBK8vp81WLZsbNl9nRgyHgZ/xJCZsY X-Gm-Gg: AY/fxX7mD6E+OnOsJwVzbTpZ+qgwkiUGXkJBf7lH/zgWVM3mDqpShZ2v9vYYwN/Xwwr nar9nH2EaeGKMzewhJmE633udBigILBWjR8DmRw+RBNEqJQzfcb/61T5pVenJloV2gryuvKKyVN xOZgXc8dP+cmLl5MZajNETNDJyYfBGjQaLuQd641m2guxFQ8FxuJewrPfkcR6O80nAYTtZokYXf 3S/wVo9feXTuH4mdZ0stf5PaTKh1qq+B7TLv7QcyV5lEkmmEP6IzdOerW0U3ZE8bz8x88Qs5Lt+ UCN5/frfmkHdHqYrtqJhGhghatjgEvAvYtG7IfGDlK8G0I2Ulgqshpjeh0Wwv6IjwPlat8UndfN p3+uAzhRFVotEQpxuoCCEkNOo/tB1POag1rru7NmA6M4YLDrjQNJ64Fps0xO0Ix6JNhjQJ76vnb sg9Q== X-Received: by 2002:a05:6820:190f:b0:659:9a49:8ecb with SMTP id 006d021491bc7-662b00f30d6mr818903eaf.79.1768926249573; Tue, 20 Jan 2026 08:24:09 -0800 (PST) Received: from localhost ([2a03:2880:10ff:48::]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-662b6c3ec82sm46001eaf.17.2026.01.20.08.24.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 08:24:08 -0800 (PST) From: Breno Leitao Date: Tue, 20 Jan 2026 08:23:50 -0800 Subject: [PATCH net-next v2 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: <20260120-nbcon-v2-4-b61f960587a8@debian.org> References: <20260120-nbcon-v2-0-b61f960587a8@debian.org> In-Reply-To: <20260120-nbcon-v2-0-b61f960587a8@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=4839; i=leitao@debian.org; h=from:subject:message-id; bh=C3+2SHjtQfzMU1QwJyHpzEXry6g/X6KazovqMtfAam8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpb6wiK2lNijph8Ob3JlC52xe9UowZSXsPao1ib h7cYIWiJ7mJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaW+sIgAKCRA1o5Of/Hh3 bTsWD/4sH6rFls+ZfRfP3Z7EbKP8D3TPqBiwU/jlr0DDVtJgFiAtULq7QLF0GVYvRO2Dy78xcUs bAgoPy8NQEJKb5mgVcE9G9Nw3P9fxB1jgL93gdxHiXhDUvoLOX/dWLPwklpI1XbkCQTpFUJfqXO zDvOOHu6WO4zoVmC+uPVa8WbhrSUfLcEoOhmJywey7VKTGbpkY3rJA+NiMRJMRl/NYQt/bsX1bj O6RtPjfMQMX4083/UoZn9I8h/dSU2luo0NQ5IsW+YiLtUe+A3DhQUnGH15aOmpLBrSo6C0mExyX KzmTb/MrRcM/lNB5auo1OaL4lpud9szjM4ZTj3YYMo0qo+ebfhXEPiyVTlSqdXrcDb5nPmHJhBf cXXBH0oCjcYRJpc/R7WQG85McQslPkeiUDDEBEc6kScqq/SERcXHcZryZ4pzV+aJ86ZGk1lwOhE p/wigXUOlk1WxlH3yRB/4aiKXb38FlEOaFnB2trlPrHd6Ipl05zCcpr0PyR0hLyl30VXOniSGbz HRHCS9m74iJRh6pMSTvNZXdumt6VLIeid413W+IH+pRcrAvktnEP4x0nGRTOZ2E0yjRkTXXTi+C yyliC00jkjaMCt+AHZwsuFtZoZdaN9QzwKJSj1DAbvknbxmxYYcQCf7mvKEi6PuNoyk3jo7Huk6 GC40G8U2R/TyuMw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index c5d7e97fe2a78..d89ff01bc9658 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1357,18 +1357,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) @@ -1389,8 +1391,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 @@ -1398,9 +1402,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) @@ -1681,31 +1685,31 @@ 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; =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); + if (wctxt->len + release_len + sysdata_len + userdata_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 @@ -1750,7 +1754,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 Sun Feb 8 13:10:36 2026 Received: from mail-oa1-f68.google.com (mail-oa1-f68.google.com [209.85.160.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42E8344D000 for ; Tue, 20 Jan 2026 16:24:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926254; cv=none; b=J12lSFWm1gOsXzkGHFEkVhEHcQHTex7cKGVwhGLzpS3+HlX9oh96j3cF2bopqcZ1uE2PyIspQnCNwpPWMjcbbtsODJmVPUENs9pwsjQZ1YMKlmXBxG2Ttv7CWBzR89Tjqyfa54R5+k9hvfkcwKAj4E3BXw04wzF/R8gb4HhYTEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768926254; c=relaxed/simple; bh=ZcGn2QU3A5rJ+BEvrbsS+gOvZYduC2WGaH1yDzJLGqo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uLbGTDDaxalOgdUIRt2EzRdSCZjo3pMz7zfJ+wMMN8L7baWVh5obja39MxJiC0EiYIVupRAwAs6XA7vCGEOAS4f+GXnw3n0r1Nn3d4JwOIlGOI9beocPEXeFynVEwnxahTnFM3Vyrhx4SfKYhMldT2smT2+kOEnWn/9ooQyItng= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.160.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-oa1-f68.google.com with SMTP id 586e51a60fabf-4042f55de3aso4209560fac.1 for ; Tue, 20 Jan 2026 08:24:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768926251; x=1769531051; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Dl37PaPNvQYRR39f2b+lPF/nR0NSHw5P2RkhHNPahM8=; b=TGtTSH5B+9rNkafyDDU0sMxt60VKOe5J0QKv4jcN2C5lu8N0vrkDnSanMagNrLlvw0 tv7NtXGswqw7fWHDso9amtRJFeDa1IhjrrYZJCh0NH/xG6quyYHI4iEd5H5yNPzTtnCI hE8hC/gccRrVUBWJwjWCpu7ZgBE/Vk/R6DGzcmzPiMUGUGn0eulbabFHilMjzwOl4uRA r77DV8TB3LMTwyWAm/VuHC8nV/01WXe5mPkTD0KqcLJLo2OFzqoiyR9TC38fg6ukY1NU lEgbL9MpM71GZ7r2XtofoynGU3wY4/lEP+vRg/yym5cWpfXzJnHTdrZuYNwm9wIFLUS8 tkLw== X-Forwarded-Encrypted: i=1; AJvYcCV3/5WgnXUkJwnKvC49DzEzkZZ21LHTqBs/1F7CQEmn+43qUkA1KpNKk7DA4NR3hQ1DVpXiouZ8PhfEe7Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9Dou4lldSB+VtEC8l92iTFiX8cgSY/DYb5LIpI1J5iOaADRSP rtn5wVtYQKN7Dafw9GdfOXTzYHMSzw7LHeFuFHT1Zyb/C85NVaZvtFSu X-Gm-Gg: AY/fxX5JDXiHZz4y3w3hzlsyTchudICDmaFEaJ3mojEsrRl2fklHqPwnma1NlWA6BrQ Ks1eODriaqs9gyFO3jdooB60MbyW/V6XDeixLTn416FRU4hAtLOiYJWdy0Hh6kM37YKBi2bOPJg kC6PS8S6W/sNqeTF8+V1i+pfZLkEt7jhsiOPhmk4a+4lFfCLQN664tQe8dhSbE3c/LBWfKZNQuY UXQuegdZiURF7sPCyhlXJTJhwJgesHIRuAMqZynzosJDI3+IwLzvIzhrR5s/n+yubrgsT3yvnsa QM6BOCDtWm7n9FaaMI6oIKlLeXnjo4DVJn8ToR+iJpyVVRXPKDOMjFcCxeibx4xSBRyUL7SThMl Bxt2vMYLqqLMjTMqv8vrTkGcj4sq05sjYB0VPbGh+UvyG7sWM7A5ehRkxU4xIhGMsacXytVYEZW T8 X-Received: by 2002:a05:6871:4314:b0:3e8:8e57:a40a with SMTP id 586e51a60fabf-404292d752bmr8953949fac.26.1768926250867; Tue, 20 Jan 2026 08:24:10 -0800 (PST) Received: from localhost ([2a03:2880:10ff:6::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4044baf613dsm9050115fac.3.2026.01.20.08.24.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 08:24:10 -0800 (PST) From: Breno Leitao Date: Tue, 20 Jan 2026 08:23:51 -0800 Subject: [PATCH net-next v2 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: <20260120-nbcon-v2-5-b61f960587a8@debian.org> References: <20260120-nbcon-v2-0-b61f960587a8@debian.org> In-Reply-To: <20260120-nbcon-v2-0-b61f960587a8@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=ZcGn2QU3A5rJ+BEvrbsS+gOvZYduC2WGaH1yDzJLGqo=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpb6wjQnnyqrLMFLj0gu6gSbbc2cuzcIPOAgASz nT/fjibktCJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaW+sIwAKCRA1o5Of/Hh3 bT8PD/4jD+NSzKxWe9ZzPcZV+X/Op7hg0Wi05Sh/Fi8OGivZKnVA2ONjHLqvkCM4bjiodkN3kGV h3K9yBe4JG3njjEYczIi9BSJrC8mV8WZgQlx/zHO90JtfB0uyOh6F59r4NqXEbRfJ/kNX1+ldHZ 3oeD91ZDjIM2SBmvt7l9gT4qb2z96D3pS0rtCp+/hg5r0eGJrs5W8gYtcDl6W2IX/6G3C/H82mm vig9fOhZFMpkHS4cvWVN+LywsVJLu+g1Y/1dJS2EbyFXQSTZ8QjgTd4tbg8hnAvVuflyaeOZirJ 4qmi8ArJkCfXc2ubA2lmw7UCyherySwD84BMovz5suIlmFfRjOs0fwjT0sdPhfQZNxuJY3vzO5f 0lTItYq6w8cgTCXgm6NgYFTZt7197x0jqPd6xpnBmxVH0wSriHegKB/PPW53qBHfrGgv3KbQMbK r+qm7W27LieDf4YW6Z4sCA0ECa9rs3x7wyZs3+ZMsIP/uMLR3z41MLc0og17I8gzDds5yKbynHH qVyMW/vvxFR2Rr5KejpfBbB1OO56GiOMUmwncI0VpI+xO+0dpZBbIrh2C+B2f7BMJFrmXuZB2a3 EJXbjvOLOBGNHats0+tXJGzmkbX/XZ5SRMPdpCAyetnUxOhdUcVuZLWfWhLEZNBBGLhsevFw7Zg zm0TMglBinAC3Ww== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 d89ff01bc9658..ab547a0da5e0d 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1713,16 +1713,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; } } @@ -1756,7 +1756,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