public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mario Limonciello <mario.limonciello@amd.com>
To: Daniel van Vugt <daniel.van.vugt@canonical.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Helge Deller" <deller@gmx.de>, "Daniel Vetter" <daniel@ffwll.ch>,
	"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	"Jani Nikula" <jani.nikula@intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 2/2] fbcon: Defer console takeover for splash screens to first switch
Date: Thu, 15 Feb 2024 13:40:43 -0600	[thread overview]
Message-ID: <bb8d631d-9f6c-48e8-a504-8931ee21014d@amd.com> (raw)
In-Reply-To: <20240214052412.22770-2-daniel.van.vugt@canonical.com>

On 2/13/2024 23:24, 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 the first switch.

I think your comment from the earlier version that this can still happen 
on simpledrm (albeit less frequently) is very relevant here for the 
commit message.

> 
> v2: Added Kconfig option instead of hard coding "splash".
> v3: Default to disabled, not "splash". If enabled then take over on
>      switch rather than on first output after switch.
> 

These you'll want below the cutlist (---)

Also I think you should mention in the commit message that the 
indication of a userspace splash is set by the Kconfig.

> 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    | 12 +++++++++
>   drivers/video/fbdev/core/fbcon.c | 44 +++++++++++++++++++++++++++++---
>   2 files changed, 52 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
> index bc31db6ef7..2f9435335f 100644
> --- a/drivers/video/console/Kconfig
> +++ b/drivers/video/console/Kconfig
> @@ -138,6 +138,18 @@ 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 "Command line parameter to defer takeover to first switch"
> +	depends on FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
> +	default ""
> +	help
> +	  If enabled this defers further the framebuffer console taking over
> +	  until the first console switch has occurred. And even then 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.
> +
>   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 1183e7a871..e5d841ab03 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"
> @@ -3348,7 +3349,7 @@ static int fbcon_output_notifier(struct notifier_block *nb,
>   {
>   	WARN_CONSOLE_UNLOCKED();
>   
> -	pr_info("fbcon: Taking over console\n");
> +	pr_info("fbcon: Taking over console for output\n");
>   
>   	dummycon_unregister_output_notifier(&fbcon_output_nb);
>   
> @@ -3357,6 +3358,27 @@ 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) {
> +		pr_info("fbcon: Taking over console for switch\n");
> +		dummycon_unregister_switch_notifier(&fbcon_switch_nb);
> +		schedule_work(&fbcon_deferred_takeover_work);
> +	}
> +
> +	return NOTIFY_OK;
> +}
> +#endif
>   #endif

Once you start adding nested #ifdef, I think it's very useful to add a 
comment on the #endif to make it easier to follow the code.

IE
#endif /* CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER_CONDITION */

>   
>   static void fbcon_start(void)
> @@ -3368,8 +3390,18 @@ static void fbcon_start(void)
>   		deferred_takeover = false;
>   
>   	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
> +		{
> +			fbcon_output_nb.notifier_call = fbcon_output_notifier;
> +			dummycon_register_output_notifier(&fbcon_output_nb);
> +		}
>   		return;
>   	}
>   #endif
> @@ -3416,8 +3448,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);


  reply	other threads:[~2024-02-15 19:40 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
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 [this message]
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=bb8d631d-9f6c-48e8-a504-8931ee21014d@amd.com \
    --to=mario.limonciello@amd.com \
    --cc=daniel.van.vugt@canonical.com \
    --cc=daniel@ffwll.ch \
    --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 \
    --cc=mripard@kernel.org \
    --cc=thomas.hellstrom@linux.intel.com \
    /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