Linux-fbdev Archive mirror
 help / color / mirror / Atom feed
From: Mario Limonciello <mario.limonciello@amd.com>
To: Daniel van Vugt <daniel.van.vugt@canonical.com>
Cc: Daniel Vetter <daniel@ffwll.ch>, 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 2/2] fbcon: Defer console takeover for splash screens to first switch
Date: Fri, 2 Feb 2024 13:46:13 -0600	[thread overview]
Message-ID: <f037df4a-8a97-4fcd-b196-43f484b63d8d@amd.com> (raw)
In-Reply-To: <20240202085408.23251-2-daniel.van.vugt@canonical.com>

On 2/2/2024 02:53, 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 for the
> "splash" parameter (as used by Plymouth) and if present then extend the
> deferral until the first switch.
> 
> 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/fbdev/core/fbcon.c | 32 +++++++++++++++++++++++++++++---
>   1 file changed, 29 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
> index 63af6ab034..5b9f7635f7 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"
> @@ -146,6 +147,7 @@ static inline void fbcon_map_override(void)
>   
>   #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
>   static bool deferred_takeover = true;
> +static int initial_console = -1;
>   #else
>   #define deferred_takeover false
>   #endif
> @@ -3341,7 +3343,7 @@ static void fbcon_register_existing_fbs(struct work_struct *work)
>   	console_unlock();
>   }
>   
> -static struct notifier_block fbcon_output_nb;
> +static struct notifier_block fbcon_output_nb, fbcon_switch_nb;
>   static DECLARE_WORK(fbcon_deferred_takeover_work, fbcon_register_existing_fbs);
>   
>   static int fbcon_output_notifier(struct notifier_block *nb,
> @@ -3358,6 +3360,21 @@ static int fbcon_output_notifier(struct notifier_block *nb,
>   
>   	return NOTIFY_OK;
>   }
> +
> +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
>   
>   static void fbcon_start(void)
> @@ -3370,7 +3387,14 @@ static void fbcon_start(void)
>   
>   	if (deferred_takeover) {
>   		fbcon_output_nb.notifier_call = fbcon_output_notifier;
> -		dummycon_register_output_notifier(&fbcon_output_nb);
> +		fbcon_switch_nb.notifier_call = fbcon_switch_notifier;
> +		initial_console = fg_console;
> +
> +		if (cmdline_find_option_bool(boot_command_line, "splash"))
> +			dummycon_register_switch_notifier(&fbcon_switch_nb);

So there is a problem here that this would only apply if the distro 
happened to use "splash" which some distros use something different.

I looked at the matching plymouth code [1] and they have a bunch of 
variations of what they accept and what it does.

[1] 
https://gitlab.freedesktop.org/plymouth/plymouth/-/blob/main/src/main.c?ref_type=heads#L888

If from the kernel side we're going to have code that caters to the 
userspace behavior of plymouth we probably need to match all those cases 
they do too.

Another alternative could be to make it a kernel configuration option 
for which string to look for to activate this behavior.

> +		else
> +			dummycon_register_output_notifier(&fbcon_output_nb);
> +
>   		return;
>   	}
>   #endif
> @@ -3417,8 +3441,10 @@ 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);
> +		dummycon_unregister_switch_notifier(&fbcon_switch_nb);
> +	}
>   	console_unlock();
>   
>   	cancel_work_sync(&fbcon_deferred_takeover_work);


  reply	other threads:[~2024-02-02 19:46 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 [this message]
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
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=f037df4a-8a97-4fcd-b196-43f484b63d8d@amd.com \
    --to=mario.limonciello@amd.com \
    --cc=dakr@redhat.com \
    --cc=daniel.van.vugt@canonical.com \
    --cc=daniel@ffwll.ch \
    --cc=deller@gmx.de \
    --cc=dri-devel@lists.freedesktop.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).