* Alexander Kuleshov <kuleshovm...@gmail.com> wrote:

> As setup_earlyprintk passed to the early_param, it will be usable only after
> 'parse_early_param' function will be called from the 'setup_arch'. So we have
> earlyprintk during early boot and decompression. Next point after 
> decompression
> of the kernel where we can use early_printk is after call of the
> 'parse_early_param'.
> 
> This patch removes 'earlyprintk' from the early_param and setup it right after
> boot data copying. So 'early_printk' function will be usabable after
> decompression of kernel and before parse_early_param will be called.
> 
> Signed-off-by: Alexander Kuleshov <kuleshovm...@gmail.com>
> ---
>  arch/x86/kernel/early_printk.c | 4 +---
>  arch/x86/kernel/head64.c       | 1 +
>  include/linux/printk.h         | 1 +
>  3 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
> index a62536a..4b0577b 100644
> --- a/arch/x86/kernel/early_printk.c
> +++ b/arch/x86/kernel/early_printk.c
> @@ -329,7 +329,7 @@ static inline void early_console_register(struct console 
> *con, int keep_early)
>       register_console(early_console);
>  }
>  
> -static int __init setup_early_printk(char *buf)
> +int __init setup_early_printk(char *buf)
>  {
>       int keep;
>  
> @@ -390,5 +390,3 @@ static int __init setup_early_printk(char *buf)
>       }
>       return 0;
>  }
> -
> -early_param("earlyprintk", setup_early_printk);
> diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
> index c4f8d46..0141de7 100644
> --- a/arch/x86/kernel/head64.c
> +++ b/arch/x86/kernel/head64.c
> @@ -171,6 +171,7 @@ asmlinkage __visible void __init x86_64_start_kernel(char 
> * real_mode_data)
>       load_idt((const struct desc_ptr *)&idt_descr);
>  
>       copy_bootdata(__va(real_mode_data));
> +     setup_early_printk(boot_command_line);
>  
>       /*
>        * Load microcode early on BSP.
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index baa3f97..47e3919 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -115,6 +115,7 @@ int no_printk(const char *fmt, ...)
>  #ifdef CONFIG_EARLY_PRINTK
>  extern asmlinkage __printf(1, 2)
>  void early_printk(const char *fmt, ...);
> +int setup_early_printk(char *buf);
>  #else
>  static inline __printf(1, 2) __cold
>  void early_printk(const char *s, ...) { }

This looks useful.

It would be nice to test it via a well placed printk() and check that 
before the patch the message doesn't go to the serial console and 
after the patch the message indeed arrives on the early serial console 
- or something like that.

Thanks,

        Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to