From: Mario Limonciello <mario.limonciello@amd.com>
To: Daniel van Vugt <daniel.van.vugt@canonical.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Helge Deller <deller@gmx.de>, Jani Nikula <jani.nikula@intel.com>,
Danilo Krummrich <dakr@redhat.com>,
linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] fbcon: Defer console takeover for splash screens to first switch
Date: Tue, 6 Feb 2024 09:41:29 -0600 [thread overview]
Message-ID: <e4fc61ae-97f5-4fa1-bfed-1312466a2a22@amd.com> (raw)
In-Reply-To: <ZcJAVSyH3gRYx3EG@phenom.ffwll.local>
On 2/6/2024 08:21, Daniel Vetter wrote:
> On Tue, Feb 06, 2024 at 06:10:51PM +0800, Daniel van Vugt wrote:
>> Until now, deferred console takeover only meant defer until there is
>> output. But that risks stepping on the toes of userspace splash screens,
>> as console messages may appear before the splash screen. So check the
>> command line for the expectation of userspace splash and if present then
>> extend the deferral until after the first switch.
>>
>> V2: Added Kconfig option instead of hard coding "splash".
>>
>> Closes: https://bugs.launchpad.net/bugs/1970069
>> Cc: Mario Limonciello <mario.limonciello@amd.com>
>> Signed-off-by: Daniel van Vugt <daniel.van.vugt@canonical.com>
>> ---
>> drivers/video/console/Kconfig | 13 +++++++++++
>> drivers/video/fbdev/core/fbcon.c | 38 ++++++++++++++++++++++++++++++--
>> 2 files changed, 49 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
>> index bc31db6ef7..a6e371bfb4 100644
>> --- a/drivers/video/console/Kconfig
>> +++ b/drivers/video/console/Kconfig
>> @@ -138,6 +138,19 @@ config FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
>> by the firmware in place, rather then replacing the contents with a
>> black screen as soon as fbcon loads.
>>
>> +config FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION
>> + string "Framebuffer Console Deferred Takeover Condition"
>> + depends on FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
>> + default "splash"
>> + help
>> + If enabled this defers further the framebuffer console taking over
>> + until the first console switch has occurred. And even then only if
>> + text has been output, and only if the specified parameter is found
>> + on the command line. This ensures fbcon does not interrupt userspace
>> + splash screens such as Plymouth which may be yet to start rendering
>> + at the time of the first console output. "splash" is the simplest
>> + distro-agnostic condition for this that Plymouth checks for.
>
> Hm this seems a bit strange since a lot of complexity that no one needs,
> also my impression is that it's rather distro specific how you want this
> to work. So why not just a Kconfig option that lets you choose how much
> you want to delay fbcon setup, with the following options:
>
> - no delay at all
> - dely until first output from the console (which then works for distros
> which set a log-level to suppress unwanted stuff)
> - delay until first vt-switch. In that case I don't think we also need to
> delay for first output, since vt switch usually means you'll get first
> output right away (if it's a vt terminal) or you switch to a different
> graphical console (which will keep fbcon fully suppressed on the drm
> side).
>
IIUC there is an "automatic" VT switch that happens with Ubuntu GRUB +
Ubuntu kernels.
Why?
Couldn't this also be suppressed by just not doing that?
> I think you could even reuse the existing
> CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER for this, and then just
> compile-time select which kind of notifier to register (well plus the
> check for "splash" on the cmdline for the vt switch one I guess).
>
> Thoughts?
>
> Cheers, Sima
>
>
>> +
>> config STI_CONSOLE
>> bool "STI text console"
>> depends on PARISC && HAS_IOMEM
>> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
>> index 63af6ab034..98155d2256 100644
>> --- a/drivers/video/fbdev/core/fbcon.c
>> +++ b/drivers/video/fbdev/core/fbcon.c
>> @@ -76,6 +76,7 @@
>> #include <linux/crc32.h> /* For counting font checksums */
>> #include <linux/uaccess.h>
>> #include <asm/irq.h>
>> +#include <asm/cmdline.h>
>>
>> #include "fbcon.h"
>> #include "fb_internal.h"
>> @@ -3358,6 +3359,26 @@ static int fbcon_output_notifier(struct notifier_block *nb,
>>
>> return NOTIFY_OK;
>> }
>> +
>> +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION
>> +static int initial_console;
>> +static struct notifier_block fbcon_switch_nb;
>> +
>> +static int fbcon_switch_notifier(struct notifier_block *nb,
>> + unsigned long action, void *data)
>> +{
>> + struct vc_data *vc = data;
>> +
>> + WARN_CONSOLE_UNLOCKED();
>> +
>> + if (vc->vc_num != initial_console) {
>> + dummycon_unregister_switch_notifier(&fbcon_switch_nb);
>> + dummycon_register_output_notifier(&fbcon_output_nb);
>> + }
>> +
>> + return NOTIFY_OK;
>> +}
>> +#endif
>> #endif
>>
>> static void fbcon_start(void)
>> @@ -3370,7 +3391,16 @@ static void fbcon_start(void)
>>
>> if (deferred_takeover) {
>> fbcon_output_nb.notifier_call = fbcon_output_notifier;
>> - dummycon_register_output_notifier(&fbcon_output_nb);
>> +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION
>> + if (cmdline_find_option_bool(boot_command_line,
>> + CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION)) {
>> + initial_console = fg_console;
>> + fbcon_switch_nb.notifier_call = fbcon_switch_notifier;
>> + dummycon_register_switch_notifier(&fbcon_switch_nb);
>> + } else
>> +#endif
>> + dummycon_register_output_notifier(&fbcon_output_nb);
>> +
>> return;
>> }
>> #endif
>> @@ -3417,8 +3447,12 @@ void __exit fb_console_exit(void)
>> {
>> #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
>> console_lock();
>> - if (deferred_takeover)
>> + if (deferred_takeover) {
>> dummycon_unregister_output_notifier(&fbcon_output_nb);
>> +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION
>> + dummycon_unregister_switch_notifier(&fbcon_switch_nb);
>> +#endif
>> + }
>> console_unlock();
>>
>> cancel_work_sync(&fbcon_deferred_takeover_work);
>> --
>> 2.43.0
>>
>
next prev parent reply other threads:[~2024-02-06 15:41 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-02 8:53 [PATCH 1/2] dummycon: Add dummycon_(un)register_switch_notifier Daniel van Vugt
2024-02-02 8:53 ` [PATCH 2/2] fbcon: Defer console takeover for splash screens to first switch Daniel van Vugt
2024-02-02 19:46 ` Mario Limonciello
2024-02-06 10:10 ` [PATCH v2 1/2] dummycon: Add dummycon_(un)register_switch_notifier Daniel van Vugt
2024-02-06 10:10 ` [PATCH v2 2/2] fbcon: Defer console takeover for splash screens to first switch Daniel van Vugt
2024-02-06 14:21 ` Daniel Vetter
2024-02-06 15:41 ` Mario Limonciello [this message]
2024-02-07 2:03 ` Daniel van Vugt
2024-02-07 9:51 ` Daniel Vetter
2024-02-07 20:21 ` Mario Limonciello
2024-02-08 1:16 ` Daniel van Vugt
2024-02-09 10:58 ` Daniel Vetter
2024-02-13 7:01 ` Daniel van Vugt
2024-02-14 5:24 ` [PATCH v3 1/2] dummycon: Add dummycon_(un)register_switch_notifier Daniel van Vugt
2024-02-14 5:24 ` [PATCH v3 2/2] fbcon: Defer console takeover for splash screens to first switch Daniel van Vugt
2024-02-15 19:40 ` Mario Limonciello
2024-02-19 9:02 ` [PATCH v4 1/2] dummycon: Add dummycon_(un)register_switch_notifier Daniel van Vugt
2024-02-19 9:02 ` [PATCH v4 2/2] fbcon: Defer console takeover for splash screens to first switch Daniel van Vugt
2024-02-22 11:08 ` Maxime Ripard
2024-02-22 16:25 ` Mario Limonciello
2024-02-26 18:23 ` [PATCH " Hans de Goede
2024-02-27 1:06 ` Daniel van Vugt
2024-02-27 13:47 ` Hans de Goede
2024-02-28 2:00 ` Daniel van Vugt
2024-02-28 11:54 ` Hans de Goede
2024-02-28 18:09 ` Mario Limonciello
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=e4fc61ae-97f5-4fa1-bfed-1312466a2a22@amd.com \
--to=mario.limonciello@amd.com \
--cc=dakr@redhat.com \
--cc=daniel.van.vugt@canonical.com \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=jani.nikula@intel.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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