Re: [PATCH net-next v2 3/5] netconsole: convert to NBCON console infrastructure
From: Simon Horman <horms@kernel.org>
Date: 2026-01-22 21:09:42
Also in:
lkml
Subsystem:
netconsole, networking drivers, the rest · Maintainers:
Breno Leitao, Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
On Tue, Jan 20, 2026 at 08:23:49AM -0800, Breno Leitao wrote:
quoted hunk ↗ jump to hunk
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/b2qps3uywhmjaym4mht2wpxul4yqtuuayeoq4iv4k3zf5wdgh3@tocu6c7mj4lt/ (local) [1] Signed-off-by: Breno Leitao <leitao@debian.org> --- drivers/net/netconsole.c | 97 ++++++++++++++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 37 deletions(-)diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
...
+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);
}
Hi Breno, I'm wondering if we could consider the following annotations, as "suggested" by Sparse[1].
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index c5d7e97fe2a7..79e39a6c5343 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c@@ -1772,12 +1772,14 @@ static void netconsole_write_basic(struct console *con __always_unused, 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); }
[1] This particular commit of Sparse, from Al Viro's tree:
https://git.kernel.org/pub/scm/linux/kernel/git/viro/sparse.git/commit/?id=2634e39bf02697a18fece057208150362c985992
Which addresses this mess:
https://lore.kernel.org/all/bf5b9a62-a120-421e-908d-1404c42e0b60@kernel.org/ (local)