From: John Ogness <john.ogness@linutronix.de>
To: Marcos Paulo de Souza <mpdesouza@suse.com>,
Petr Mladek <pmladek@suse.com>,
Steven Rostedt <rostedt@goodmis.org>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
Marcos Paulo de Souza <mpdesouza@suse.com>
Subject: Re: [PATCH 1/2] printk: Introduce LOUD_CON flag
Date: Wed, 16 Oct 2024 20:17:48 +0206 [thread overview]
Message-ID: <84plnz29zv.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <20241016-printk-loud-con-v1-1-065e4dad6632@suse.com>
Hi Marcus,
On 2024-10-16, Marcos Paulo de Souza <mpdesouza@suse.com> wrote:
> Introduce LOUD_CON flag to printk.
Generally speaking, I do not like the name "LOUD_CON". The flag is
related to records, not consoles. Something like "NO_SUPPRESS" or
"FORCE_PRINT" might be more appropriate. Note that naming is not my
strength.
> The new flag will make it possible to
> create a context where printk messages will never be suppressed. This
> new context information will be stored in the already existing
> printk_context per-CPU variable. This variable was changed from 'int' to
> 'unsigned int' to avoid issues with automatic casting.
>
> This mechanism will be used in the next patch to create a loud_console
> context on sysrq handling, removing an existing workaround on the
> loglevel global variable. The workaround existed to make sure that sysrq
> header messages were sent to all consoles.
IMO the more interesting aspect is that the "loud" flag is stored in the
ringbuffer so that the message is not suppressed, even if printed later
(for example because it was deferred). This actually even fixes a bug
since the current workaround will not perform as expected if the sysrq
records are deferred (for example due to threaded printing or consoles
that are registered later).
> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index beb808f4c367..b893825fe21d 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -1321,6 +1321,7 @@ static void boot_delay_msec(int level)
> unsigned long timeout;
>
> if ((boot_delay == 0 || system_state >= SYSTEM_RUNNING)
> + || is_printk_console_loud()
> || suppress_message_printing(level)) {
I do not think "loud" should be a reason to skip the delays. The delays
are there to slow down printing. I would think that for "loud" messages,
this is even more important. I suppose this function (as well as
printk_delay()) would need a new boolean parameter whether it is a
"loud" message. Then:
|| (!loud_con && suppress_message_printing(level))
> @@ -2273,6 +2274,9 @@ int vprintk_store(int facility, int level,
> if (dev_info)
> flags |= LOG_NEWLINE;
>
> + if (is_printk_console_loud())
> + flags |= LOG_LOUD_CON;
> +
> if (flags & LOG_CONT) {
> prb_rec_init_wr(&r, reserve_size);
> if (prb_reserve_in_last(&e, prb, &r, caller_id, PRINTKRB_RECORD_MAX)) {
I guess LOG_LOUD_CON should also be set in the LOG_CONT case (like
LOG_NEWLINE does).
> diff --git a/kernel/printk/printk_safe.c b/kernel/printk/printk_safe.c
> index 2b35a9d3919d..4618988baeea 100644
> --- a/kernel/printk/printk_safe.c
> +++ b/kernel/printk/printk_safe.c
> @@ -12,7 +12,30 @@
>
> #include "internal.h"
>
> -static DEFINE_PER_CPU(int, printk_context);
> +static DEFINE_PER_CPU(unsigned int, printk_context);
> +
> +#define PRINTK_SAFE_CONTEXT_MASK 0x0000ffffU
> +#define PRINTK_LOUD_CONSOLE_CONTEXT_MASK 0xffff0000U
> +#define PRINTK_LOUD_CONSOLE_CONTEXT_OFFSET 0x00010000U
> +
> +void noinstr printk_loud_console_enter(void)
> +{
> + cant_migrate();
> + this_cpu_add(printk_context, PRINTK_LOUD_CONSOLE_CONTEXT_OFFSET);
> +}
Have you tested this with lockdep? AFAICT, the write_sysrq_trigger()
path can migrate since it is only using rcu_read_lock() in
__handle_sysrq().
John Ogness
next prev parent reply other threads:[~2024-10-16 18:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 17:03 [PATCH 0/2] printk: Add loud_console printk flag to not suppress sysrq header msgs Marcos Paulo de Souza
2024-10-16 17:03 ` [PATCH 1/2] printk: Introduce LOUD_CON flag Marcos Paulo de Souza
2024-10-16 18:11 ` John Ogness [this message]
2024-10-17 10:24 ` Petr Mladek
2024-10-18 7:14 ` John Ogness
2024-10-21 13:33 ` Petr Mladek
2024-10-21 14:11 ` John Ogness
2024-10-23 20:36 ` Marcos Paulo de Souza
2024-10-24 8:34 ` Petr Mladek
2024-10-18 12:11 ` Marcos Paulo de Souza
2024-10-19 1:28 ` kernel test robot
2024-10-16 17:03 ` [PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq Marcos Paulo de Souza
2024-10-18 3:43 ` kernel test robot
2024-10-18 4:36 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=84plnz29zv.fsf@jogness.linutronix.de \
--to=john.ogness@linutronix.de \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mpdesouza@suse.com \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).