From: John Ogness <john.ogness@linutronix.de>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH printk 06/18] printk: Protect [un]register_console() with a mutex
Date: Fri, 30 Sep 2022 15:36:58 +0206 [thread overview]
Message-ID: <87r0ztugz1.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <YzW9ExRVjv6PzvWR@alley>
On 2022-09-29, Petr Mladek <pmladek@suse.com> wrote:
> It is the legacy mode that tries to print to the consoles immediately.
> I am not sure if we could _ever_ remove this mode.
We are not trying to remove this mode. We are trying to introduce a new
mode. Once all the console drivers have moved over to the new mode, the
old mode can disappear. If some console drivers never move over, the old
mode can hang around.
It is important to understand that we are not trying to change the old
mode. This was our big mistake leading to the 5.19-revert.
> And it is most likely the main reason why semaphore is used instead
> of a mutex:
>
> + printk() can be called in atomic context
>
> + also there is the console_trylock_spinning() trick that allows
> to transfer the semaphore to another owner without locking.
>
> Do you see any RT-friendly solution for the legacy mode, please?
No. Legacy mode will never work for RT because the console drivers are
using spinlocks, which for RT requires that preemption is enabled.
> Anyway, some lock will still be needed to synchronize the list.
> But could it be mutex? What about the legacy mode of printk_emit()?
For list updates a mutex is fine. All list updates already require
may_sleep contexts. For just iterating the list, SRCU is fine.
But we really need an atomic variable (or separate data-race bools) for
the properties that are not immutable. AFAIK this is only CON_ENABLED
and CON_CONSDEV (and I seriously question the usefulness/correctness of
CON_CONSDEV). If console_is_enabled() could be safely called without a
lock, neither console_lock nor console_list_lock would be needed to
safely iterate and act on the console list.
The NOBKL consoles (not included in this series) use a separate atomic
state variable to handle this. Perhaps the legacy consoles could
(mis)use that variable so that CON_ENABLED is atomic for them as well.
>> Yes! One of the main points of this final phase of the rework is to
>> remove console_sem usage (for NOBKL consoles). If a system is running
>> with only NOBKL consoles registered, ideally that system should never
>> call console_lock()/console_trylock(). Once all drivers have
>> converted over to the NOBKL interface, console_sem will serve no
>> purpose for the printk and console frameworks, so it can be removed.
>
> And even if we convert all console drivers then people still might
> want the legacy mode.
For converted drivers there is no use for the pseudo-synchronous legacy
mode. Converted drivers can run in true synchronous mode if the user
wants.
> My understanding is that some atomic consoles would be real hacks.
Well, it is up to the maintainers to make sure they are not real
hacks. We are not mandating that all drivers are converted. But I think
when devs start seeing the benefits of the converted drivers (and will
have many working examples to be inspired by) there will be honest
efforts to correctly convert the driver.
> They might be good enough for panic(). But what about running system.
> It seems that people might want the legacy more even on running
> system. Will it be doable with mutex?
I'm not sure what you mean here, but I think you are referencing
situations that are not valid. Either drivers are legacy (and continue
using the BKL) or they are correctly converted to the new atomic/thread
model (and have nothing to do with the BKL).
There will be some exceptions (such as fbdev), which is why we are also
considering special alternatives for this class of drivers (such as BSoD
splash on panic, rather than an atomic console).
> I would really like to avoid state where we have two locks (semaphore
> and mutex) serializing the same thing (console list).
I understand. I will look into this more closely. But it may just mean
adding comments above each console_lock() to say:
1. that it is being using to stop all console printing
2. why all console printing needs to stop
Notice that the above list does not include "provide synchronization for
the console list".
John
next prev parent reply other threads:[~2022-09-30 13:31 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-24 0:04 [PATCH printk 00/18] preparation for threaded/atomic printing John Ogness
2022-09-24 0:04 ` [PATCH printk 01/18] printk: Make pr_flush() static John Ogness
2022-09-26 14:12 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 02/18] printk: Declare log_wait properly John Ogness
2022-09-26 14:22 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 03/18] printk: Remove write only variable nr_ext_console_drivers John Ogness
2022-09-26 14:25 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 04/18] printk: Remove bogus comment vs. boot consoles John Ogness
2022-09-26 14:26 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 05/18] printk: Mark __printk percpu data ready __ro_after_init John Ogness
2022-09-26 14:27 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 06/18] printk: Protect [un]register_console() with a mutex John Ogness
2022-09-24 9:31 ` Sergey Senozhatsky
2022-09-27 15:16 ` Petr Mladek
2022-09-28 9:46 ` Sergey Senozhatsky
2022-09-28 23:42 ` John Ogness
2022-09-29 15:43 ` Petr Mladek
2022-09-30 9:24 ` Petr Mladek
2022-09-30 14:16 ` John Ogness
2022-09-30 18:04 ` Petr Mladek
2022-09-30 20:26 ` John Ogness
2022-10-03 14:37 ` Petr Mladek
2022-10-03 19:35 ` John Ogness
2022-10-04 2:06 ` Sergey Senozhatsky
2022-10-04 7:28 ` Petr Mladek
2022-09-30 13:30 ` John Ogness [this message]
2022-09-24 0:04 ` [PATCH printk 07/18] printk: Convert console list walks for readers to list lock John Ogness
2022-09-27 14:07 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 08/18] parisc: Put console abuse into one place John Ogness
2022-09-24 0:20 ` Steven Rostedt
2022-09-30 7:54 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 09/18] serial: kgdboc: Lock console list in probe function John Ogness
2022-09-28 23:32 ` Doug Anderson
2022-09-30 8:07 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 10/18] kgbd: Pretend that console list walk is safe John Ogness
2022-09-26 9:33 ` Aaron Tomlin
2022-09-28 23:32 ` Doug Anderson
2022-09-30 8:39 ` Petr Mladek
2022-09-30 13:44 ` John Ogness
2022-09-30 17:27 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 11/18] printk: Convert console_drivers list to hlist John Ogness
2022-09-24 10:53 ` Sergey Senozhatsky
2022-09-24 17:20 ` Helge Deller
2022-09-25 0:43 ` Sergey Senozhatsky
2022-09-24 17:27 ` Helge Deller
2022-09-30 14:20 ` Petr Mladek
2022-09-30 16:53 ` Helge Deller
2022-09-30 19:46 ` John Ogness
2022-09-30 22:41 ` Helge Deller
2022-09-24 0:04 ` [PATCH printk 12/18] printk: Prepare for SCRU console list protection John Ogness
2022-09-24 10:58 ` Sergey Senozhatsky
2022-09-24 0:04 ` [PATCH printk 13/18] printk: Move buffer size defines John Ogness
2022-09-24 11:01 ` Sergey Senozhatsky
2022-10-07 9:11 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 14/18] printk: Document struct console John Ogness
2022-09-24 11:08 ` Sergey Senozhatsky
2022-10-07 11:57 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 15/18] printk: Add struct cons_text_buf John Ogness
2022-09-24 11:09 ` Sergey Senozhatsky
2022-10-07 15:15 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 16/18] printk: Use " John Ogness
2022-09-24 11:34 ` Sergey Senozhatsky
2022-10-10 10:11 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 17/18] printk: Use an output descriptor struct for emit John Ogness
2022-10-10 15:40 ` Petr Mladek
2022-09-24 0:04 ` [PATCH printk 18/18] printk: Handle dropped message smarter John Ogness
2022-09-26 4:19 ` Sergey Senozhatsky
2022-09-26 7:54 ` John Ogness
2022-09-26 9:18 ` Sergey Senozhatsky
2022-10-10 16:07 ` Petr Mladek
2022-09-26 9:22 ` Sergey Senozhatsky
2022-09-24 6:44 ` [PATCH printk 00/18] preparation for threaded/atomic printing Greg Kroah-Hartman
2022-09-25 15:23 ` John Ogness
2022-09-24 9:47 ` Sergey Senozhatsky
2022-09-29 16:33 ` Petr Mladek
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=87r0ztugz1.fsf@jogness.linutronix.de \
--to=john.ogness@linutronix.de \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tglx@linutronix.de \
/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
all inboxes | Powered by JetHome®