From nobody Sun Feb 8 21:28:00 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 6C406279DC3; Wed, 28 Jan 2026 14:18:40 +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=1769609921; cv=none; b=XZC9EWCtPiAkSCB0aR3vBd3yOTNTSeCaiLAt86WWGemoEug13AGMN/z/s21jAbLNCzbBOymjUAgnEseWWoO2WiX/6d6fmKKoHLlLL+hZAwhnXDLzX9msIrlWG0cbkE5xbQchO3HHZRjVgYDih9o8C6gf1HbVKWW2AaY4/75l+Ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769609921; c=relaxed/simple; bh=836B/rxD2lUW0GeGAux4FVApdOXS1I6GKcBB00j3jSU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VI78b/oHPssUsjhAmoMwAEDITGpoKa5w2SIN85nL3W+2xw0pY20MoqMc754wQlvfX+6tD+S0DmcVOREj3kIaoO+7TS6kodgSNr6ZP1KUo+61DY2jzLPgixGIub6Or+r/sAC3vMVopPEhfOicPK01eSqKLtcaTtbnO67Bb0Ae1PI= 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=ugwOpqv4; 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="ugwOpqv4" 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=SVQdYhNhZkjnMcKdvs7TsBVf0DPXFlB8N7xeGZuEaBw=; b=ugwOpqv4GR89BgOmeg0NkhHQS4 0ck3Bo8IUo6UipYq4coTln0AO4oYX1Ge/Cwjq6lWWsMbg/pY8db1OZPErqXIfygTYuyOEAsb7OmSh vhK/twalx9kES16lIRr6GuyIAfCfOnXKI6xLqh0LmsTwbjaqhatzPvf6TusR08iVf31rjoEYghwMa bZQ2WdD7ECoEoN/XZ04BRy5O4oOrVNBD6NPmIdXhYsKv1Pau6LV/4kIjt+nfTCQ/ptbXn9V+bMrNE bQfGSekFqCcvmgrzXIs3yHaMj6RvigdPY3rnTiMGzi3yq1jl3MLV/ShJhEjzNknlAwfkjdZd06B8p fkr8St4w==; 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 1vl6NQ-000DuM-9x; Wed, 28 Jan 2026 14:18:36 +0000 From: Breno Leitao Date: Wed, 28 Jan 2026 06:17:40 -0800 Subject: [PATCH net-next v5 4/4] 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: <20260128-nbcon-v5-4-93b4ddbc181a@debian.org> References: <20260128-nbcon-v5-0-93b4ddbc181a@debian.org> In-Reply-To: <20260128-nbcon-v5-0-93b4ddbc181a@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-f4305 X-Developer-Signature: v=1; a=openpgp-sha256; l=4859; i=leitao@debian.org; h=from:subject:message-id; bh=836B/rxD2lUW0GeGAux4FVApdOXS1I6GKcBB00j3jSU=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBpehqeiV3lDU9f8hOTn1ryjodJGHd7p813fBro6 F8NAwus8MiJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaXoangAKCRA1o5Of/Hh3 bR4BD/4/53eRvLZ3+MRD+7DXe13PtVsGCmK2cqOspfsSqxst/FePSMgyeMsfB2GX09nnTybTD/0 qbWdrsYpNj61XWEGpYn8+kY6LOPQ5dNFPOgjCKulNAmXfKeSqw7mVlh8Et6XtcN78z4uTtSLVD1 M7b/USnP1V7RtjNuUrnvjoWcs1YBBL60kkJ3yf0xpW0SaIYd+cskRmidKr7bC0SxX8nlM5dkUmJ X4gVjpQtpSbX7AqfxcvCsEp/DsSLjTSI5dzNdoCaDCxZX7l83eHTY/sEgObWdto/Bm6nDCXSjXR qQtrN9YxiGSJPPmD9D7+s9cY7SZ6b5Qq0Fo9AtsDlOevV5GcSzbmkj8MnV3uJ4DBr2ikEANb+ZD uHPpwGsNMVmyJWliEf7PGenVXYQn2pX4dOnwOOI1TiGfZH8vdHW6y1OjSCsSIE116V2THooPl7A PSBd4AxCfncpwyuv+TeQI9HNQ19fmAS2Kn5NTPeuldVOjqCgIvk+VuQsY5SIWNkyYd1BwkZQsJZ nteadWJY0fitE+Ai0kvWIfInSkHjQcbolpywpLv14t/i4DLdLREwo2OX/PObbc7nF7OyVifewrz rhRSIKjO6k6I/fqFL/shlDba/2Pv7tlQxguX1O3WD1b580am7DJjQQEV0C2G3/qmKuIaPVWIGBO anhC/u754K/Hdwg== 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->cpu instead of raw_smp_processor_id(). For taskname, use wctxt->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 Reviewed-by: John Ogness Reviewed-by: Petr Mladek --- 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