All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Alexander Kuleshov <kuleshovmail@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Borislav Petkov <bp@suse.de>,
	Mark Rustad <mark.d.rustad@intel.com>,
	Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH v6 3/3] x86/earlyprintk: setup earlyprintk as early as possible
Date: Tue, 12 May 2015 14:19:13 +0300	[thread overview]
Message-ID: <1431429553.28073.63.camel@linux.intel.com> (raw)
In-Reply-To: <1431418208-2274-1-git-send-email-kuleshovmail@gmail.com>

On Tue, 2015-05-12 at 14:10 +0600, Alexander Kuleshov wrote:
> The early_printk function is usable only after the setup_early_printk will
> be executed. We pass 'earlyprintk' through the kernel command line, so it
> will be usable only after the 'parse_early_param' will be executed. This means
> that we have usable earlyprintk only during early boot, kernel decompression
> and after call of the 'parse_early_param'. This patchset makes earlyprintk
> usable before the call of the 'parse_early_param'.
> 
> This patch makes setup_early_printk visible for head{32,64}.c. So the
> 'early_printk' function will be usabable after decompression of the
> kernel and before parse_early_param will be called. It also must be
> safe if CONFIG_CMDLINE_BOOL and CONFIG_CMDLINE_OVERRIDE are set, because
> setup_cmdline function will be called before setup_early_printk.
> 

Few comments below.

> Tested it with qemu, so early_printk() is usable and prints to serial
> console right after setup_early_printk function called.
> 
> Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
> ---
>  arch/x86/include/asm/serial.h  |  3 +++
>  arch/x86/kernel/early_printk.c | 25 +++++++++++++++++++++++++
>  arch/x86/kernel/head32.c       |  5 +++++
>  arch/x86/kernel/head64.c       |  5 +++++
>  4 files changed, 38 insertions(+)
> 
> diff --git a/arch/x86/include/asm/serial.h b/arch/x86/include/asm/serial.h
> index 8378b8c..198f041 100644
> --- a/arch/x86/include/asm/serial.h
> +++ b/arch/x86/include/asm/serial.h
> @@ -26,4 +26,7 @@
>  	{ .uart = 0,	BASE_BAUD,	0x3E8,	4,	STD_COMX_FLAGS	}, /* ttyS2 */	\
>  	{ .uart = 0,	BASE_BAUD,	0x2E8,	3,	STD_COM4_FLAGS	}, /* ttyS3 */
> 
> +/* used by arch/x86/kernel/head{32,64}.c */
> +int __init setup_early_serial_console(void);
> +

Actually, have you investigated how this works on the other supported
architectures? It might be better to align this with them.

>  #endif /* _ASM_X86_SERIAL_H */
> diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
> index 89427d8..96425c3 100644
> --- a/arch/x86/kernel/early_printk.c
> +++ b/arch/x86/kernel/early_printk.c
> @@ -385,4 +385,29 @@ static int __init setup_early_printk(char *buf)
>  	return 0;
>  }
> 
> +int __init setup_early_serial_console(void)
> +{
> +#ifdef CONFIG_EARLY_PRINTK
> +	char *arg;
> +
> +	/*
> +	* make sure that we have:
> +	*      "serial,0x3f8,115200"
> +	*      "serial,ttyS0,115200"
> +	*      "ttyS0,115200"
> +	*/

Indentation and text styling problems.

> +	arg = strstr(boot_command_line, "earlyprintk=serial");
> +	if (!arg)
> +		arg = strstr(boot_command_line, "earlyprintk=ttyS");
> +	if (!arg)
> +		return -1;

What about other cases like that described in setup_early_printk()?

> +
> +	arg = strstr(boot_command_line, "earlyprintk=");
> +	/* += strlen("earlyprintk"); */
> +	arg += 12;
> +
> +	return setup_early_printk(arg);
> +#endif

#ifdef seems redundant here, you already build this module iff
EARLY_PRINTK is set.

> +}

So, the logic of this function seems broken. I don't get why you have to
check the contents of earlyprintk parameter.

> +
>  early_param("earlyprintk", setup_early_printk);
> diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
> index 92e8b5f..d325d0c 100644
> --- a/arch/x86/kernel/head32.c
> +++ b/arch/x86/kernel/head32.c
> @@ -32,6 +32,11 @@ static void __init i386_default_early_setup(void)
>  asmlinkage __visible void __init i386_start_kernel(void)
>  {
>  	setup_builtin_cmdline();
> +	setup_early_serial_console();
> +
> +	if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG)
> +		early_printk("Kernel alive\n");

This should be unified (like printed "Early printk is initialized" in
setup_early_printk() ), moreover what about other architectures?


> +
>  	cr4_init_shadow();
>  	sanitize_boot_params(&boot_params);
> 
> diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
> index 38da21c..06fcc1b 100644
> --- a/arch/x86/kernel/head64.c
> +++ b/arch/x86/kernel/head64.c
> @@ -173,6 +173,11 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
>  	copy_bootdata(__va(real_mode_data));


>  	setup_builtin_cmdline();
> 
> +	setup_early_serial_console();

Those two can be grouped in the same way like in previous change (see
above).

> +
> +	if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG)
> +		early_printk("Kernel alive\n");

Same comment as in above chunk.

> +
>  	/*
>  	 * Load microcode early on BSP.
>  	 */
> --
> 2.4.0


-- 
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy


  reply	other threads:[~2015-05-12 11:19 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-11 10:08 [PATCH RESEND v5 0/2] x86/earlyprintk: setup earlyprintk as early as possible Alexander Kuleshov
2015-05-11 10:09 ` [PATCH v2 1/2] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
2015-05-11 10:21   ` Borislav Petkov
2015-05-11 10:36   ` Andy Shevchenko
2015-05-11 10:09 ` [PATCH v5 2/2] x86/earlyprintk: setup earlyprintk as early as possible Alexander Kuleshov
2015-05-11 10:24   ` Borislav Petkov
2015-05-11 10:39 ` [PATCH RESEND v5 0/2] " Andy Shevchenko
2015-05-12  8:08 ` [PATCH v6 0/3] Alexander Kuleshov
2015-05-12  8:09   ` [PATCH v3 1/3] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
2015-05-12 10:50     ` Andy Shevchenko
2015-05-12 16:14       ` Alexander Kuleshov
2015-05-12 17:52         ` Andy Shevchenko
2015-05-12  8:09   ` [PATCH v1 2/3] x86/setup: handle builtin command line as early as possible Alexander Kuleshov
2015-05-12  8:10   ` [PATCH v6 3/3] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
2015-05-12 11:19     ` Andy Shevchenko [this message]
2015-05-12 16:26       ` Alexander Kuleshov
2015-05-12 17:58         ` Andy Shevchenko
2015-05-12 18:08           ` Alexander Kuleshov
  -- strict thread matches above, loose matches on Subject: below --
2015-05-18  8:46 [RESEND PATCH v6 0/3] x86/earlyprintk: setup serial " Alexander Kuleshov
2015-05-18  8:47 ` [PATCH v6 3/3] x86/earlyprintk: setup " Alexander Kuleshov

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=1431429553.28073.63.camel@linux.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=bp@suse.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=kuleshovmail@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.d.rustad@intel.com \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=yinghai@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.