From nobody Mon Dec 1 22:03:44 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 BD0D9305E2E for ; Thu, 27 Nov 2025 19:43:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764272610; cv=none; b=piIb4EzZia21br4O1VzqySbPjyhTvjuTdIutmSjU3uz9fGUvznZnEbVwGl9znPrtMpJ4Td4ULHz3wCI9azqXIuxAG5Zzi5hOvB3wAoD2OEb3Hqk30wfRg8QXKhMgG9GZZnejiFYg64/fZSdf2DeU5x7VLg3EJ+eIxwxEkdGqXVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764272610; c=relaxed/simple; bh=gIlwj7PxAEVPumYlA/ibhNMZFQglsF/4R1YRArIKBxk=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=coAjhTBtr0FSOBjX7z3KacfB8jLHBC9GSTb7b/NwxqjoWD95GWWyN7urdM2ttDiAa9bHPRteeq3Zv3FPVNuKWZTMZF0lqU5nn+P3347LgbHVNr8NOAenhDljO9I4T9tKIIB/ZrwKgBWWpZPz7PQlmQ7bTiM00zKZpvR2nhTfYr4= 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=ekGV1f9m; arc=none smtp.client-ip=209.85.214.174 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="ekGV1f9m" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-29812589890so13972985ad.3 for ; Thu, 27 Nov 2025 11:43:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chrisdown.name; s=google; t=1764272608; x=1764877408; darn=vger.kernel.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=NvaQaqjVfwGrZEwdB9ep7c3I3nSUVn9dHRmfxLYEc/E=; b=ekGV1f9mP+CBj+3vw+4OU8Eje7FK+K3yAMboz17wkBj+Fg8WyLMJ0HiBb2BtIgjwea /tvrMvRkgG1AOV2ssakgF64A2vZ0b6O5t8m5EJ95Nn7XguO8qExHYudTxL+udKn5ycy0 9tXQY3axmRNOvajZmcGHbQwMlLcxhw9vmsbDE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764272608; x=1764877408; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=NvaQaqjVfwGrZEwdB9ep7c3I3nSUVn9dHRmfxLYEc/E=; b=NHjQe6Ic6nvbP2f0CLZkZlU9/NjMwNP0ui4Kum/oPcwte+yaBK63JreCWS6YyTB4V8 scs02//k9rutR8apZieGJbjE36JPI1V5WNroh/TlwJNXxjhQFRFYOUneuwmi+gGlzxIE MLvQxJNAwITY4+ZftyOJ2pLcYfRuPQt0G8lk7pgwnq0Z5esB7PpekaPw4XrUo7r6YIJH tvMy+q8QLLtQoN7rOlQgowjNC020Yo7ZjcEkIP/+VzqAHMOLrRIrCu1sO1h/QzyD7lm/ vdiulI3owa3VoRiGcDMk7JxrKr7eYSGQwDwIR7cknb2QD5Qz1uVWmFZ7jJbtvavz+/ed KBow== X-Gm-Message-State: AOJu0YxYh/vDuGjpZjJ9dSLLl0RF1G2Fv98JCxqGyjgWHi6iRWwDISdf CodPMwmaWR6Ts3sXf9kOmuXGjufTkKRt8p8Cauj9QOZx1IlC6TYbvAh4pmRAz4RGK0k= X-Gm-Gg: ASbGncvL7nfvShLtUXRoyXVzZ3qBlK2fxMHxS1lkFvvJkkpKttWy67VSVaC/BvTPwwi 3mQtSGlkIj//ry388kHfE00ej1R+XjY7BRGeZL8aDBHGZ95adZyspoYjdrorpnxFqLe7m3DtD7m mLGf7ZhkLOQ/io1TFcaRiswR25ZS2aGlfhU+lp80/uyWPM8GAF/K6MDFx3kK4L4oVod68uBFv+k iXLgmtbXO2crUzw00S9oX+BExir77HiQUd4C44UQCBDUhm2ZhTApewyJW1J2JwOX5FSnTv5fQxl /WIged7t0HfKXU2LLvf9CNBAb+GkD7+mgTGd0qJ8Q0dtasiip/M6BLWLEGLFGF9mbSD20TOloYB HYS1mivmeOp+TFj5hhldLoV14f1bmnm+NMfZkI0qQrYqlt7jTgEEBakJ68N9sV3HrGIq5myOgW8 vUkP+Eotum X-Google-Smtp-Source: AGHT+IFQD3IcOkG0E4u090U4d0OldznrH4rf4gqvanvv5ZeLhfPE9dUqYBbGF1x3ZvGIbH3XCAlv3Q== X-Received: by 2002:a17:902:e788:b0:28e:756c:707e with SMTP id d9443c01a7336-29b6bf3b5fdmr244927765ad.33.1764272608033; Thu, 27 Nov 2025 11:43:28 -0800 (PST) Received: from localhost ([116.86.198.140]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bceb7d4f4sm24240925ad.101.2025.11.27.11.43.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Nov 2025 11:43:27 -0800 (PST) Date: Fri, 28 Nov 2025 03:43:25 +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 v8 04/21] printk: Use effective loglevel for suppression and extended console state Message-ID: <9741f83a8763f590395ebbabcf76bf7c62e7b281.1764272407.git.chris@chrisdown.name> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/2.2.15 (2b349c5e) (2025-10-02) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for supporting per-console loglevels, modify printk_get_next_message() to accept the effective console loglevel instead of individual arguments that mimic console fields. This keeps the function console-agnostic and lockless as intended, while still allowing per-console loglevel support to be added in later patches. devkmsg_read() uses CONSOLE_LOGLEVEL_MOTORMOUTH to never suppress messages. All other consoles pass their effective loglevel (currently console_loglevel, will be per-console in later patches). Reviewed-by: Petr Mladek Signed-off-by: Chris Down --- kernel/printk/internal.h | 2 +- kernel/printk/nbcon.c | 2 +- kernel/printk/printk.c | 22 +++++++++++++--------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/kernel/printk/internal.h b/kernel/printk/internal.h index f72bbfa266d6..1ed86577896c 100644 --- a/kernel/printk/internal.h +++ b/kernel/printk/internal.h @@ -333,7 +333,7 @@ struct printk_message { }; =20 bool printk_get_next_message(struct printk_message *pmsg, u64 seq, - bool is_extended, bool may_supress); + bool is_extended, int con_eff_level); =20 #ifdef CONFIG_PRINTK void console_prepend_dropped(struct printk_message *pmsg, unsigned long dr= opped); diff --git a/kernel/printk/nbcon.c b/kernel/printk/nbcon.c index 558ef3177976..eb4c8faa213d 100644 --- a/kernel/printk/nbcon.c +++ b/kernel/printk/nbcon.c @@ -993,7 +993,7 @@ static bool nbcon_emit_next_record(struct nbcon_write_c= ontext *wctxt, bool use_a if (!nbcon_context_enter_unsafe(ctxt)) return false; =20 - ctxt->backlog =3D printk_get_next_message(&pmsg, ctxt->seq, is_extended, = true); + ctxt->backlog =3D printk_get_next_message(&pmsg, ctxt->seq, is_extended, = console_loglevel); if (!ctxt->backlog) return nbcon_context_exit_unsafe(ctxt); =20 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 447d9c28f180..9f40ebfac0c1 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -807,7 +807,8 @@ static ssize_t devkmsg_read(struct file *file, char __u= ser *buf, if (ret) return ret; =20 - if (!printk_get_next_message(&pmsg, atomic64_read(&user->seq), true, fals= e)) { + if (!printk_get_next_message(&pmsg, atomic64_read(&user->seq), true, + CONSOLE_LOGLEVEL_MOTORMOUTH)) { if (file->f_flags & O_NONBLOCK) { ret =3D -EAGAIN; goto out; @@ -825,7 +826,7 @@ static ssize_t devkmsg_read(struct file *file, char __u= ser *buf, */ ret =3D wait_event_interruptible(log_wait, printk_get_next_message(&pmsg, atomic64_read(&user->seq), true, - false)); /* LMM(devkmsg_read:A) */ + CONSOLE_LOGLEVEL_MOTORMOUTH)); /* LMM(devkmsg_read:A) */ if (ret) goto out; } @@ -1279,9 +1280,9 @@ module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR= ); MODULE_PARM_DESC(ignore_loglevel, "ignore loglevel setting (prints all kernel messages to the console)"); =20 -static bool suppress_message_printing(int level) +static bool suppress_message_printing(int level, int con_eff_level) { - return (level >=3D console_loglevel && !ignore_loglevel); + return (level >=3D con_eff_level && !ignore_loglevel); } =20 #ifdef CONFIG_BOOT_PRINTK_DELAY @@ -2115,7 +2116,7 @@ int printk_delay_msec __read_mostly; static inline void printk_delay(int level) { /* If the message is forced (e.g. panic), we must delay */ - if (!is_printk_force_console() && suppress_message_printing(level)) + if (!is_printk_force_console() && suppress_message_printing(level, consol= e_loglevel)) return; =20 boot_delay_msec(); @@ -2977,14 +2978,15 @@ void console_prepend_replay(struct printk_message *= pmsg) * @is_extended specifies if the message should be formatted for extended * console output. * - * @may_supress specifies if records may be skipped based on loglevel. + * @con_eff_level is the effective console loglevel to use for suppression + * checks. * * Returns false if no record is available. Otherwise true and all fields * of @pmsg are valid. (See the documentation of struct printk_message * for information about the @pmsg fields.) */ bool printk_get_next_message(struct printk_message *pmsg, u64 seq, - bool is_extended, bool may_suppress) + bool is_extended, int con_eff_level) { struct printk_buffers *pbufs =3D pmsg->pbufs; const size_t scratchbuf_sz =3D sizeof(pbufs->scratchbuf); @@ -3013,13 +3015,14 @@ bool printk_get_next_message(struct printk_message = *pmsg, u64 seq, =20 pmsg->seq =3D r.info->seq; pmsg->dropped =3D r.info->seq - seq; + force_con =3D r.info->flags & LOG_FORCE_CON; =20 /* * Skip records that are not forced to be printed on consoles and that * has level above the console loglevel. */ - if (!force_con && may_suppress && suppress_message_printing(r.info->level= )) + if (!force_con && suppress_message_printing(r.info->level, con_eff_level)) goto out; =20 if (is_extended) { @@ -3095,7 +3098,8 @@ static bool console_emit_next_record(struct console *= con, bool *handover, int co =20 *handover =3D false; =20 - if (!printk_get_next_message(&pmsg, con->seq, is_extended, true)) + if (!printk_get_next_message(&pmsg, con->seq, is_extended, + console_loglevel)) return false; =20 con->dropped +=3D pmsg.dropped; --=20 2.51.2