From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 4B2E3285072 for ; Tue, 18 Nov 2025 19:06:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492807; cv=none; b=uLuMsun9+w74yCoI7dZ8vzXSwrpJ/gvld4Fo/QBxHAMaGS76ieQBE5OPLLcjtFuIl29R1qz2YOHMNjOS/ap9iXTilDMn3D26ZVGyT+eXmnhf78UguUSMQgJh52dJZOQq1So1hxOrttOs+Xf7GacnJSYYsf/NjuCrHDCAju6t72E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492807; c=relaxed/simple; bh=CywRPBLUBV6obkrtOPPpE/7mMc2oJIPsa82kBy840mo=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=hKPSK6VR661PtI6LYI7oHtempvqPHXFkOb4uPqBMPQK5d3k1SZbKLBQvowjg2kP1muT2Yqzw5zr0qH7/gFpz3/O9SG+q0pecqQCYcuQwD6DyrsNALvT8v++QEvILqFy8uQ7uTxoSopm+ybNXMOxKlg/CGlUjQerb5SfjRv4W7Fk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=chrisdown.name; spf=pass smtp.mailfrom=chrisdown.name; dkim=pass (1024-bit key) header.d=chrisdown.name header.i=@chrisdown.name header.b=Yw4zoUqI; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=chrisdown.name Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chrisdown.name Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chrisdown.name header.i=@chrisdown.name header.b="Yw4zoUqI" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-341988c720aso4929243a91.3 for ; Tue, 18 Nov 2025 11:06:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chrisdown.name; s=google; t=1763492804; x=1764097604; darn=vger.kernel.org; h=user-agent:content-disposition:mime-version:message-id:subject:cc :to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=suX7kFyaS8hODvRKi1kIBUqz2cmsM2+cUXWaCVhomoY=; b=Yw4zoUqIAhwBSYyk7hhzDnhT2L1INKahJkaNhzNmQdUuyliesbx2F2xZq2SI1PYh/Q g/OqdmW2XE38YvsEPEJZx8nM9UzFrhHp96nNzLH19JyUEHsQJZzr7KzBRuwYqzXg2N72 fex3rMDqtWRFxjaOWlpbP2bYkxqKcDdWOFYUQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763492804; x=1764097604; h=user-agent:content-disposition:mime-version:message-id:subject:cc :to:from:date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=suX7kFyaS8hODvRKi1kIBUqz2cmsM2+cUXWaCVhomoY=; b=S28yEv+2mn0GDKNxvoov61bVnsOwCb/RCAC7M1B9Cxr1vQox6aPJeCu8SiUsj1iTmU mC5ROukqzi8KSY1oeFZKt2T6VZxzJb3IKvvb9Jqk5FKRdKV7KfdgQYO/qmmBeXJ1i8TS C/y58TzBZNDAkHSPd56G2ak0N+Eg0lFoAUeZ6QJnduqlTe5+La4NoVLm01mi4GoUQAPB 2vhAuVJJ0CvFocNY/5a9uFlsgFUTNHU4AtTF7erj9h5lDxcbk3lKp67j5FwARlne39jp pbplDFAShCPNb84Aw4ywptMU/P/mvVmNsCdHFt9qUHXKZscxfj4149mx130q4KWmU6ni eWkg== X-Gm-Message-State: AOJu0YwG0NVxBM+FeGi526clTqonkrkYDMnPi5ol+uD14zt5oWrZUYq8 fqkeCgF3XGp44/649d3p4ZTErDxIKvdKFWqgJPyHdjPR4EUzE6ELl28aWUOz87Rl+bB97BhGGH5 YsGAUEWk= X-Gm-Gg: ASbGncvMayYKWDSn/MH/je7iX+coleW0B65rz2PWHdbknjLUcPhBFtz4CzV6KXYhM+n mJW4CZRJfLp8Vu0QHnrdYDeV5Fle+GhrN2HtV2d406ppOsiRIxDttfGMhh59u/2aP9GQ3zvHPc5 McXKxQAPOSR7kY4xnhdTQpoa9tSdZtXhmndYoivDwBH6plRcPC4WvLWjuFd/mNIfsFojwsLc5aI CwnapWAe0PefX2TMmrv54iukX5cMXocsB4GD9/f0+ojOYpkd2fxr23ODEifuKmzfLkVFNWmX7mP Wo2fZ7RG0+5KrxiKQnRMsHcYc55hkGJoHuLJs+Uq+PCyeuU+Kj5nsHX5InoXMUAwtA8qn6WyhBT 6nAQz3y+TFOhgJC8SwU49mPmRllOQ9s+0R/cE9ccRsjGvCTxOidTFNgZIlSoeNx3Tfr1YT3lpug bEqQ3xmJoTKafHodn7fVY= X-Google-Smtp-Source: AGHT+IFXt+N5Eo4joMJYgFa1ar0Pws5jR6cvMoNGEjgMiv/PirfDiRt0UytgBi4By8hSQ/2CttXwAw== X-Received: by 2002:a17:90a:c2c7:b0:341:8bda:d0ae with SMTP id 98e67ed59e1d1-343fa63366emr19584809a91.20.1763492804431; Tue, 18 Nov 2025 11:06:44 -0800 (PST) Received: from localhost ([116.86.198.140]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-345bbfe257esm211499a91.7.2025.11.18.11.06.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 11:06:44 -0800 (PST) Date: Wed, 19 Nov 2025 03:06:41 +0800 From: Chris Down To: Petr Mladek Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Sergey Senozhatsky , Steven Rostedt , John Ogness , Geert Uytterhoeven , Tony Lindgren , kernel-team@fb.com Subject: [PATCH v7 00/13] printk: console: Per-console loglevels Message-ID: 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=us-ascii Content-Disposition: inline User-Agent: Mutt/2.2.15 (2b349c5e) (2025-10-02) There was a lot of review feedback last round, I sincerely hope I didn't miss anything :-) Thanks, Petr, Greg, John, and Tony for the feedback and reviews. v7: - Disallow writing -1 to the global console_loglevel sysctl - Change printk_get_next_message() to take effective loglevel - Update suppress_message_printing() to take effective loglevel - Use CONSOLE_LOGLEVEL_MOTORMOUTH for devkmsg_read() - Fix documentation per Petr's review comments - Add console_srcu_read_loglevel() for lockless reading - Rename per_console_loglevel_is_set() to has_per_console_loglevel() - Refactor API to take int con_level for better lockdep checking - Update callers to read con_level using console_srcu_read_loglevel() - Remove hierarchy comment since it's obvious from the code - Use LOGLEVEL_DEFAULT as base level instead of hardcoded -1 - Use pr_warn_once() in sysrq handling instead of manual warned variable - Split sysrq handling into separate commit - Update code/ABI documentation to change loglevel bounds from 0 to 1 - Remove 'enabled' attribute from sysfs interface - Move #ifdefs out of sysfs.c - Fix console_clamp_loglevel() to use documented bounds - Initialise classdev and level in try_enable_default_console() - Fix race condition, use console_list_lock() in console_setup_class() - Remove NULL check before device_unregister() - Add data_race() annotations to READ_ONCE/WRITE_ONCE for KCSAN - Remove pr_warn() for unknown loglevel source - Add error handling for kzalloc() failure - Make console_class constant via class_register() per Greg - Export do_proc_dointvec() and do_proc_dointvec_conv() - Refactor to use @conv callback approach - Rename printk_console_loglevel() to proc_dointvec_console_loglevel() - Simplify level assignment to `newcon->level = c->level;` per Petr - Add missing loglevel= parameter documentation - Change printk_sysctl_deprecated to proc_dointvec_printk_deprecated - Add missing kernel parameter documentation for ignore_loglevel - Reject KERN_EMERG (0) consistently - Add comprehensive usage examples to per-console-loglevel.rst - Add troubleshooting section with common issues and solutions - Update ABI documentation with error conditions and permissions - Document new struct console fields (level and classdev) - Rename clamp_loglevel() to console_clamp_loglevel() for clarity - Add kernel doc comments for internal API functions where it helps - Initialise classdev in try_enable_default_console() explicitly - Mark console devices with device_set_pm_not_required() - Add syslog_lock around SYSLOG_ACTION_CONSOLE_{OFF,ON} v6: - Add .rst suffix to documentation in do_syslog - Add loglevel table to per-console-loglevel.rst and serial-console.rst - Add newlines between multiline bullets in per-console-loglevel.rst - Make effective_loglevel doc more clear - Remove ignore_per_console_loglevel doc, it's not shown in sysfs now - Use READ_ONCE/WRITE_ONCE for con->level - Ignore/restore per console loglevel in sysrq - Add new fields to comment above struct console - Remove now unused flags field on console_cmdline - Remove WARN_ON_ONCE(!con) in effective loglevel checks - Avoid underflow in find_and_remove_console_option if val_buf_size == 0 - Better error message on oversize in find_and_remove_loglevel_option - Reject if clamped in find_and_remove_loglevel_option - Clarify level setting logic in __add_preferred_console - Move console emission check to printk_delay itself - Use console_src_read_flags in enabled_show - Infer if extended from con in printk_get_next_message, don't pass args - Remove misleading comment about early consoles in console_init - Use a goto in loglevel_store to avoid setting level in multiple places - Mention only @flags and @level are valid in printk_get_next_message - Use LOGLEVEL_DEBUG for max clamp in sysctls - Update for class_create interface changes - Move sysctl functionality out to sysfs.c - Purge default_console_loglevel - Update sysctl docs for kernel.printk deprecation v5: - Fix syntax in boot_delay v4: - Change base to Linus' master - Use SRCU iterators for console walks - Override per-console loglevels on magic sysrq - Fix htmldocs - Fix mistaken __user annotation in sysctl callbacks - Consistently use indexed names (eg. ttyS0 instead of ttyS) - Remove "The loglevel for a console can be set in many places" comment - Remove CON_LOGLEVEL flag and infer based on >0 - Open code our dev_get_drvdata console stashing - Split out console_effective_loglevel functions per Petr's suggestion - Make boot_delay_msec/printk_delay check if it would be emitted - Simplify warning on SYSLOG_ACTION_CONSOLE_LEVEL - Save/restore ignore_per_console_loglevel on syslog console actions - Unify min/max level checks across sysfs/proc/syslog - Add find_and_remove_console_option to avoid affecting io/mmio options v3: - Update to work with John's kthread patches - Remove force_console_loglevel, now we only have global and local levels - Remove minimum_console_loglevel control and document how to change it - The minimum loglevel is now only honoured on setting global/local level - Add ignore_per_console_loglevel - Return -EINVAL if trying to set below minimum console level - Add parser for named console= options - Fix docs around ignore_loglevel: it can be changed at runtime - Fix ordering in "in order of authority" docs - Remove duplicated default_console_loglevel doc - Only warn once on syslog() use v2: - Dynamically allocate struct device* - Document sysfs attributes in Documentation/ABI/ - Use sysfs_emit() instead of sprintf() in dev sysfs files - Remove WARN_ON() for device_add/IS_ERR(console_class) - Remove "soon" comment for kernel.printk - Fix !CONFIG_PRINTK build - Fix device_unregister() NULL dereference if called before class setup - Add new documentation to MAINTAINERS Chris Down (13): printk: Avoid delaying messages that aren't solicited by any console printk: Use effective loglevel for suppression and extended console state printk: console: Implement core per-console loglevel infrastructure printk: Ignore per-console loglevel in sysrq printk: Add synchronisation for concurrent console state changes printk: Support toggling per-console loglevel via syslog() and cmdline printk: console: Introduce sysfs interface for per-console loglevels printk: Constrain hardware-addressed console checks to name position printk: Support setting initial console loglevel via console= on cmdline printk: Add sysctl interface to set global loglevels printk: docs: Add comprehensive guidance for per-console loglevels printk: Deprecate the kernel.printk sysctl interface printk: Purge default_console_loglevel Documentation/ABI/testing/sysfs-class-console | 58 +++ Documentation/admin-guide/index.rst | 1 + .../admin-guide/kernel-parameters.txt | 31 +- .../admin-guide/per-console-loglevel.rst | 261 ++++++++++++++ Documentation/admin-guide/serial-console.rst | 37 +- Documentation/admin-guide/sysctl/kernel.rst | 25 +- Documentation/core-api/printk-basics.rst | 35 +- Documentation/networking/netconsole.rst | 17 + MAINTAINERS | 2 + drivers/tty/sysrq.c | 22 ++ include/linux/console.h | 45 ++- include/linux/printk.h | 9 +- include/linux/sysctl.h | 7 + kernel/printk/Makefile | 2 +- kernel/printk/console_cmdline.h | 1 + kernel/printk/internal.h | 20 +- kernel/printk/nbcon.c | 4 +- kernel/printk/printk.c | 339 ++++++++++++++++-- kernel/printk/sysctl.c | 66 +++- kernel/printk/sysfs.c | 213 +++++++++++ kernel/sysctl.c | 18 +- 21 files changed, 1141 insertions(+), 72 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-class-console create mode 100644 Documentation/admin-guide/per-console-loglevel.rst create mode 100644 kernel/printk/sysfs.c base-commit: 372a12bd5df0199aa234eaf8ef31ed7ecd61d40f -- 2.51.2