From nobody Mon Feb 9 06:34:42 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