From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Jocelyn Falempe <jfalempe@redhat.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
Javier Martinez Canillas <javierm@redhat.com>,
"Guilherme G . Piccoli" <gpiccoli@igalia.com>,
bluescreen_avenger@verizon.net,
Caleb Connolly <caleb.connolly@linaro.org>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 5/6] drm/log: Implement suspend/resume
Date: Tue, 5 Nov 2024 13:19:49 +0100 [thread overview]
Message-ID: <ZyoNZfLT6tlVAWjO@pathway.suse.cz> (raw)
In-Reply-To: <84ikt3c8uy.fsf@jogness.linutronix.de>
On Mon 2024-11-04 16:38:53, John Ogness wrote:
> On 2024-11-04, Petr Mladek <pmladek@suse.com> wrote:
> > I wonder whether console_start()/console_stop() should really
> > manipulate CON_ENABLE flag. It might be historical solution when
> > @console_suspended was a global variable.
> >
> > But it has changed with the commit 9e70a5e109a4a2336 ("printk: Add
> > per-console suspended state").
> >
> > It might make more sense when console_start()/console_stop()
> > manipulates CON_SUSPENDED flag. Then it would make sense
> > to rename them suspend_this_console()/resume_this_console().
>
> I worry about letting console drivers and printk.c both modify this flag
> during normal runtime. One might clear CON_SUSPENDED too soon and cause
> trouble.
>
> CON_ENABLE and @console_suspended were always orthogonal. Moving
> @console_suspended to CON_SUSPENDED did not change that relationship.
>
> IMHO we should continue to keep them separate. But your point about the
> console not being registered is a good one. We should update
> console_stop()/console_start() to only operate on @console if it is
> registered. Since those functions take the console_list_lock anyway, it
> would be a simple change.
First, I am fine with using console_start()/console_stop() in this
patchset. I agree that this API was created for this purpose
and should still work fine.
But I think that the API is a bit messy and would deserve a clean up.
We should do it in a separate patchset.
History:
+ commit 56dafec3913935c997 ("Import 2.1.71") in v2.1.71, Nov 2007 [1]
This version introduced "console=" parameter which allowed to
choose the consoles on the commandline. Before, they were
selected at build time.
The @flags and CON_ENABLED flag were added here as well.
It looks to me like all available console drivers were registered
but only consoles with CON_ENABLE flag printed the messages.
+ commit 33c0d1b0c3ebb61243d9b ("[PATCH] Serial driver stuff")
in v2.5.28, Jul 2002 [1]
Added generic serial_core. The CON_ENABLED flag was re-used
to disable console when suspending the serial drivers.
+ commit 557240b48e2dc4f6fa878 ("Add support for suspending and
resuming the whole console subsystem") in v2.6.18, Jun 2006
Added @console_suspended global variable. It was used as a big hammer
to block all console drivers and avoid subtle problems during suspend.
+ commit 9e70a5e109a4a233678 ("printk: Add per-console suspended state")
in v6.6, Jul 2023
Replaced the global @console_supended global variable with
per-console CON_SUSPENDED flag.
The motivation seems to be to remove dependency on console_lock.
The per-CPU flag allows to query the state via SRCU.
But the flag is set for all consoles at the same time in
console_suspend()/console_resume()
=> it still works as the big hammer.
Observation:
+ CON_ENABLED is not needed for the original purpose. Only enabled
consoles are added into @console_list.
+ CON_ENABLED is still used to explicitely block the console driver
during suspend by console_stop()/console_start() in serial_core.c.
It is not bad. But it is a bit confusing because we have
CON_SUSPENDED flag now and this is about suspend/resume.
+ CON_SUSPENDED is per-console flag but it is set synchronously
for all consoles.
IMHO, a global variable would make more sense for the big hammer
purpose.
Big question:
Does the driver really needs to call console_stop()/console_start()
when there is the big hammer?
I would preserve it because it makes the design more robust.
Anyway, the driver-specific handling looks like the right solution.
The big hammer feels like a workaround.
Reasonable semantic:
1. Rename:
console_suspend() -> console_suspend_all()
console_resume() -> console_resume_all()
and manipulate a global @consoles_suspended variable agagin.
It is the big hammer API.
2. Rename:
console_stop(con) -> console_suspend(con)
console_start(con) -> console_resume(con)
and manipulare the per-console CON_SUSPENDED flag here.
3. Get rid of the ambiguous CON_ENABLED flag. It won't longer
have any purpose.
Except that it is also used to force console registration.
But it can be done a better way, e.g. by introducing
register_console_force() API.
As I said, we could/should this clean up in a separate patchset.
Like printk-people should fix the printk-mess.
[1] pre-git linux kernel history:
git://git.kernel.org/pub/scm/linux/kernel/git/history/history.git
Best Regards,
Petr
next prev parent reply other threads:[~2024-11-05 12:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-23 12:00 [PATCH v5 0/6] drm/log: Introduce a new boot logger to draw the kmsg on the screen Jocelyn Falempe
2024-10-23 12:00 ` [PATCH v5 1/6] drm/panic: Move drawing functions to drm_draw Jocelyn Falempe
2024-10-23 12:00 ` [PATCH v5 2/6] drm/log: Introduce a new boot logger to draw the kmsg on the screen Jocelyn Falempe
2024-10-23 12:00 ` [PATCH v5 3/6] drm/log: Do not draw if drm_master is taken Jocelyn Falempe
2024-10-23 12:00 ` [PATCH v5 4/6] drm/log: Color the timestamp, to improve readability Jocelyn Falempe
2024-10-23 12:00 ` [PATCH v5 5/6] drm/log: Implement suspend/resume Jocelyn Falempe
2024-10-24 14:34 ` Petr Mladek
2024-10-24 23:11 ` Jocelyn Falempe
2024-10-25 9:46 ` Jocelyn Falempe
2024-11-01 16:00 ` Petr Mladek
2024-11-04 9:56 ` Jocelyn Falempe
2024-11-04 10:46 ` John Ogness
2024-11-04 14:15 ` Petr Mladek
2024-11-04 14:36 ` Jocelyn Falempe
2024-11-04 15:32 ` John Ogness
2024-11-05 12:19 ` Petr Mladek [this message]
2024-11-05 14:19 ` John Ogness
2024-10-23 12:00 ` [PATCH v5 6/6] drm/log: Add integer scaling support Jocelyn Falempe
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=ZyoNZfLT6tlVAWjO@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=airlied@gmail.com \
--cc=bluescreen_avenger@verizon.net \
--cc=caleb.connolly@linaro.org \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gpiccoli@igalia.com \
--cc=javierm@redhat.com \
--cc=jfalempe@redhat.com \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=tzimmermann@suse.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