linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v10 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible
@ 2015-06-07 14:13 Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 1/3] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Alexander Kuleshov @ 2015-06-07 14:13 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Alexander Kuleshov, Andy Shevchenko, LKML, Greg Kroah-Hartman,
	Borislav Petkov, Mark Rustad, Yinghai Lu

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
means that earlyprintk will be usable only after the 'parse_early_param'
will be executed or in another words earlyprintk is usable only during early
boot, kernel decompression and after call of the parse_early_param. But
there are many stuff after the kernel decompression and before the
parse_early_param will be called as memblock usage, early cpu initialization,
early ioremap initialization and etc... So earlyprintk allows us to see
what's going on there.
 
Patchset was tested for both x86 and x86_64 architectures with the qemu
and real hadware.

It provides call of the earlyprintk function right after the early
initialization of the serial console in the arch/x86/kernel/head{32,64.c},
so it must prints the debug string.
 
These patchset provides following changes:
 
1. Move handling of the builtin command line to the separate function
from the setup_arch. Now we can call it from the arch/x86/kernel/head{32,64}.c,
and find 'earlyprintk' kernel command line paramter there.
 
2. Provide setup_serial_console function to setup serial earlyprintk in the
arch/x86/kernel/head{32,64}.c

v10:

* Removed style issues which are not related to the patchset.

v9:
 
* Add call of the lockdep_init to the arch/x86/kernel/head{32,64}.c
before the serial console initialization to prevent:
 
[    0.000000] WARNING: lockdep init error! lock-(console_sem).lock was acquiredbefore lockdep_init
[    0.000000] Call stack leading to lockdep invocation was:
[    0.000000]  [<ffffffff81013f0f>] save_stack_trace+0x2f/0x50
[    0.000000]  [<ffffffff810a364c>] __lock_acquire+0xa2c/0xf00
[    0.000000]  [<ffffffff810a440b>] lock_acquire+0xdb/0x2b0
[    0.000000]  [<ffffffff81676b33>] _raw_spin_lock_irqsave+0x53/0x90
[    0.000000]  [<ffffffff8109b146>] down+0x16/0x50
[    0.000000]  [<ffffffff810b4d49>] console_lock+0x19/0x60
[    0.000000]  [<ffffffff810b78e6>] register_console+0x116/0x350
[    0.000000]  [<ffffffff81c36162>] setup_early_printk+0x165/0x467
[    0.000000]  [<ffffffff81c364ba>] setup_early_serial_console+0x56/0x58
[    0.000000]  [<ffffffff81c24565>] x86_64_start_kernel+0xce/0x110
[    0.000000]  [<ffffffffffffffff>] 0xffffffffffffffff
[    0.000000] ------------------------
 
during early serial console initialization.
 
* Add additional check to the earlyprintk initialization to protect
double initialization of the early_serial_console.
* Fixed comment.
 
v8:
 
* Fixed warning with the definition of the setup_early_serial_console
in the arch/x86/include/asm/setup.h
 
v7:
 
* Move setup_early_serial_console to the the arch/x86/include/setup.h
* Add ifdefs to prevent setup_serial_console if CONFIG_EARLY_PRINTK
is not set.
 
v6:
 
* Style fixes.
* Call of the suetp_builtin_cmdline moved to the separate patch.
 
v5:
 
* Call setup_builtin_cmdline instead of setup_cmdline
 
v4:
 
* Move setup_early_serial_console from the include/linux/printk.h
to the arch/x86/include/asm/serial.h, because this function is only
for x86 now.
 
v3:
 
* Call setup_cmdline before setup_early_printk;
* setup_early_printk call wrapped with the setup_early_serial_console which
checks that 'serial' given to the earlyprintk command line option. This
prevents call of the setup_early_printk with the given pciserial/dbgp/efi,
because they are using early_ioremap.
 
v2:
 
* Comment added before the setup_early_printk call;
* Added information about testing to the commit message.

Alexander Kuleshov (3):
  x86/setup: introduce setup_bultin_cmdline
  x86/setup: handle builtin command line as early as possible
  x86/earlyprintk: setup earlyprintk as early as possible

 arch/x86/include/asm/setup.h   |  8 ++++++++
 arch/x86/kernel/early_printk.c | 30 ++++++++++++++++++++++++++++--
 arch/x86/kernel/head32.c       |  8 ++++++++
 arch/x86/kernel/head64.c       |  8 ++++++++
 arch/x86/kernel/setup.c        | 29 ++++++++++++++++-------------
 5 files changed, 68 insertions(+), 15 deletions(-)

--
2.4.0.GIT


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v10 1/3] x86/setup: introduce setup_bultin_cmdline
  2015-06-07 14:13 [PATCH v10 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible Alexander Kuleshov
@ 2015-06-07 14:14 ` Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 2/3] x86/setup: handle builtin command line as early as possible Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
  2 siblings, 0 replies; 7+ messages in thread
From: Alexander Kuleshov @ 2015-06-07 14:14 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Alexander Kuleshov, Andy Shevchenko, LKML, Greg Kroah-Hartman,
	Borislav Petkov, Mark Rustad, Yinghai Lu

This patch introduces the setup_builtin_cmdline function which appends or
overrides boot_command_line with the builtin_cmdline if CONFIG_CMDLINE_BOOL
is set.

Previously this functional was in the setup_arch, but we need to move
it for getting actual command line as early as possible in the
arch/x86/kernel/head{32,64}.c for the earlyprintk setup.

Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
---
 arch/x86/include/asm/setup.h |  1 +
 arch/x86/kernel/setup.c      | 30 +++++++++++++++++-------------
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h
index f69e06b..59efd0d 100644
--- a/arch/x86/include/asm/setup.h
+++ b/arch/x86/include/asm/setup.h
@@ -119,6 +119,7 @@ asmlinkage void __init x86_64_start_kernel(char *real_mode);
 asmlinkage void __init x86_64_start_reservations(char *real_mode_data);
 
 #endif /* __i386__ */
+void __init setup_builtin_cmdline(void);
 #endif /* _SETUP */
 #else
 #define RESERVE_BRK(name,sz)				\
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index d74ac33..edd4857 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -845,6 +845,22 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
 	return 0;
 }
 
+void __init setup_builtin_cmdline(void)
+{
+#ifdef CONFIG_CMDLINE_BOOL
+#ifdef CONFIG_CMDLINE_OVERRIDE
+	strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
+#else
+	if (builtin_cmdline[0]) {
+		/* append boot loader cmdline to builtin */
+		strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
+		strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+		strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
+	}
+#endif
+#endif
+}
+
 /*
  * Determine if we were loaded by an EFI loader.  If so, then we have also been
  * passed the efi memmap, systab, etc., so we should use these data structures
@@ -973,20 +989,7 @@ void __init setup_arch(char **cmdline_p)
 	bss_resource.start = __pa_symbol(__bss_start);
 	bss_resource.end = __pa_symbol(__bss_stop)-1;
 
-#ifdef CONFIG_CMDLINE_BOOL
-#ifdef CONFIG_CMDLINE_OVERRIDE
-	strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
-#else
-	if (builtin_cmdline[0]) {
-		/* append boot loader cmdline to builtin */
-		strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
-		strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
-		strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
-	}
-#endif
-#endif
-
+	setup_builtin_cmdline();
 	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
 	*cmdline_p = command_line;
 
--
2.4.0.GIT


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v10 2/3] x86/setup: handle builtin command line as early as possible
  2015-06-07 14:13 [PATCH v10 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 1/3] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
@ 2015-06-07 14:14 ` Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
  2 siblings, 0 replies; 7+ messages in thread
From: Alexander Kuleshov @ 2015-06-07 14:14 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Alexander Kuleshov, Andy Shevchenko, LKML, Greg Kroah-Hartman,
	Borislav Petkov, Mark Rustad, Yinghai Lu

This patch adds the call of the setup_builtin_cmdline to
handle builtin command line before we will setup earlyprintk.

Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
---
 arch/x86/kernel/head32.c | 1 +
 arch/x86/kernel/head64.c | 2 ++
 arch/x86/kernel/setup.c  | 1 -
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
index 2911ef3..92e8b5f 100644
--- a/arch/x86/kernel/head32.c
+++ b/arch/x86/kernel/head32.c
@@ -31,6 +31,7 @@ static void __init i386_default_early_setup(void)
 
 asmlinkage __visible void __init i386_start_kernel(void)
 {
+	setup_builtin_cmdline();
 	cr4_init_shadow();
 	sanitize_boot_params(&boot_params);
 
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index 5a46681..1e5f064 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -172,6 +172,8 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
 
 	copy_bootdata(__va(real_mode_data));
 
+	setup_builtin_cmdline();
+
 	/*
 	 * Load microcode early on BSP.
 	 */
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index edd4857..0aeee0a 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -989,8 +989,6 @@ void __init setup_arch(char **cmdline_p)
 	bss_resource.start = __pa_symbol(__bss_start);
 	bss_resource.end = __pa_symbol(__bss_stop)-1;
 
-	setup_builtin_cmdline();
 	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
 	*cmdline_p = command_line;
 
--
2.4.0.GIT


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk as early as possible
  2015-06-07 14:13 [PATCH v10 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 1/3] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
  2015-06-07 14:14 ` [PATCH v10 2/3] x86/setup: handle builtin command line as early as possible Alexander Kuleshov
@ 2015-06-07 14:14 ` Alexander Kuleshov
  2015-06-08  9:33   ` Borislav Petkov
  2 siblings, 1 reply; 7+ messages in thread
From: Alexander Kuleshov @ 2015-06-07 14:14 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Alexander Kuleshov, Andy Shevchenko, LKML, Greg Kroah-Hartman,
	Borislav Petkov, Mark Rustad, Yinghai Lu

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 the 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.

It provides earlyprintk only for serial console, because other needs in
ioremap which is not initialized yet.

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/setup.h   |  7 +++++++
 arch/x86/kernel/early_printk.c | 30 ++++++++++++++++++++++++++++--
 arch/x86/kernel/head32.c       |  7 +++++++
 arch/x86/kernel/head64.c       |  6 ++++++
 4 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h
index 59efd0d..201eda0 100644
--- a/arch/x86/include/asm/setup.h
+++ b/arch/x86/include/asm/setup.h
@@ -120,6 +120,13 @@ asmlinkage void __init x86_64_start_reservations(char *real_mode_data);
 
 #endif /* __i386__ */
 void __init setup_builtin_cmdline(void);
+
+#ifdef CONFIG_EARLY_PRINTK
+/* used by arch/x86/kernel/head{32,64}.c */
+extern int __init setup_early_serial_console(void);
+#else
+static inline int __init setup_early_serial_console(void) { return 0; }
+#endif /* CONFIG_EARLY_PRINTK */
 #endif /* _SETUP */
 #else
 #define RESERVE_BRK(name,sz)				\
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
index 89427d8..5373298 100644
--- a/arch/x86/kernel/early_printk.c
+++ b/arch/x86/kernel/early_printk.c
@@ -342,14 +342,16 @@ static int __init setup_early_printk(char *buf)
 	keep = (strstr(buf, "keep") != NULL);
 
 	while (*buf != '\0') {
-		if (!strncmp(buf, "serial", 6)) {
+		if (!strncmp(buf, "serial", 6) &&
+		    early_serial_console.index == -1) {
 			buf += 6;
 			early_serial_init(buf);
 			early_console_register(&early_serial_console, keep);
 			if (!strncmp(buf, ",ttyS", 5))
 				buf += 5;
 		}
-		if (!strncmp(buf, "ttyS", 4)) {
+		if (!strncmp(buf, "ttyS", 4) &&
+		    early_serial_console.index == -1) {
 			early_serial_init(buf + 4);
 			early_console_register(&early_serial_console, keep);
 		}
@@ -385,4 +387,28 @@ static int __init setup_early_printk(char *buf)
 	return 0;
 }
 
+int __init setup_early_serial_console(void)
+{
+	char *arg;
+
+	/*
+	 * make sure that we have:
+	 *      "serial,0x3f8,115200"
+	 *      "serial,ttyS0,115200"
+	 *      "ttyS0,115200"
+	 */
+	arg = strstr(boot_command_line, "earlyprintk=serial");
+	if (!arg)
+		arg = strstr(boot_command_line, "earlyprintk=ttyS");
+	if (!arg)
+		return -1;
+
+	arg = strstr(boot_command_line, "earlyprintk=");
+
+	/* += strlen("earlyprintk"); */
+	arg += 12;
+
+	return setup_early_printk(arg);
+}
+
 early_param("earlyprintk", setup_early_printk);
diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
index 92e8b5f..6969d97 100644
--- a/arch/x86/kernel/head32.c
+++ b/arch/x86/kernel/head32.c
@@ -32,6 +32,13 @@ static void __init i386_default_early_setup(void)
 asmlinkage __visible void __init i386_start_kernel(void)
 {
 	setup_builtin_cmdline();
+
+	lockdep_init();
+
+	setup_early_serial_console();
+
+	early_printk("Early printk is initialized\n");
+
 	cr4_init_shadow();
 	sanitize_boot_params(&boot_params);
 
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index 1e5f064..769d411 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -174,7 +174,12 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
 
 	setup_builtin_cmdline();
 
+	lockdep_init();
+
+	setup_early_serial_console();
+
+	early_printk("Early printk is initialized\n");
+
 	/*
 	 * Load microcode early on BSP.
 	 */
--
2.4.0.GIT


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk as early as possible
  2015-06-07 14:14 ` [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
@ 2015-06-08  9:33   ` Borislav Petkov
  2015-06-09  9:19     ` Alexander Kuleshov
  0 siblings, 1 reply; 7+ messages in thread
From: Borislav Petkov @ 2015-06-08  9:33 UTC (permalink / raw)
  To: Alexander Kuleshov
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Andy Shevchenko,
	LKML, Greg Kroah-Hartman, Mark Rustad, Yinghai Lu

On Sun, Jun 07, 2015 at 08:14:37PM +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 the 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.
> 
> It provides earlyprintk only for serial console, because other needs in
> ioremap which is not initialized yet.
> 
> 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/setup.h   |  7 +++++++
>  arch/x86/kernel/early_printk.c | 30 ++++++++++++++++++++++++++++--
>  arch/x86/kernel/head32.c       |  7 +++++++
>  arch/x86/kernel/head64.c       |  6 ++++++
>  4 files changed, 48 insertions(+), 2 deletions(-)

...

> diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
> index 92e8b5f..6969d97 100644
> --- a/arch/x86/kernel/head32.c
> +++ b/arch/x86/kernel/head32.c
> @@ -32,6 +32,13 @@ static void __init i386_default_early_setup(void)
>  asmlinkage __visible void __init i386_start_kernel(void)
>  {
>  	setup_builtin_cmdline();
> +
> +	lockdep_init();
> +
> +	setup_early_serial_console();
> +
> +	early_printk("Early printk is initialized\n");
> +
>  	cr4_init_shadow();
>  	sanitize_boot_params(&boot_params);
>  
> diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
> index 1e5f064..769d411 100644
> --- a/arch/x86/kernel/head64.c
> +++ b/arch/x86/kernel/head64.c
> @@ -174,7 +174,12 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
>  
>  	setup_builtin_cmdline();
>  
> +	lockdep_init();

So you've added that lockdep_init() call here and above on the 32-bit
path and haven't removed the one in start_kernel().

* Then, your patches don't apply. Something garbles them insanely so that
not even fuzzy, ignore-context patch --merge works. Please fix your
setup. For that, send your patches to yourself and try applying them.
Send them out only if they apply cleanly.

And do them against tip/master or latest Linus rc, alternatively.

* To that patchset: I did the diff below ontop of yours to check whether
that early printk actually works.

And it doesn't on my test box here.

The beginning of my dmesg contains:

[    0.000000] bootconsole [earlyser0] enabled
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.1.0-rc6+ (root@gondor) (gcc version 4.9.1 (Debian 4.9.1-19) ) #2 SMP PREEMPT Mon Jun 8 11:10:00 CEST 2015
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.1.0-rc6+ root=/dev/sda7 ro earlyprintk=ttyS0,115200 console=ttyS0,115200 console=tty0 root=/dev/sda7 log_buf_len=10M resume=/dev/sda5 no_console_suspend ignore_loglevel
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]: 0240, xstate_sizes[2]: 0100
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 0x340 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
...

and I have CONFIG_EARLY_PRINTK=y. So provided I'm not missing anything,
I'd say you'd need to do more staring.

So I'd suggest you test your patches on bare metal, both 32-bit and
64-bit with a similar diff as the one I've done below.

HTH.

---
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index d4ea6ec28f09..20dd514ce838 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -179,7 +179,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
 
 	early_printk("Early printk is initialized\n");
 
-
 	/*
 	 * Load microcode early on BSP.
 	 */
@@ -202,5 +201,7 @@ void __init x86_64_start_reservations(char *real_mode_data)
 
 	reserve_ebda_region();
 
+	early_printk("Will start_kernel\n");
+
 	start_kernel();
 }
diff --git a/init/main.c b/init/main.c
index 2115055faeac..e9180445283e 100644
--- a/init/main.c
+++ b/init/main.c
@@ -494,6 +494,8 @@ asmlinkage __visible void __init start_kernel(void)
 	char *command_line;
 	char *after_dashes;
 
+	early_printk("Will run lockdep_init needlessly one more time\n");
+
 	/*
 	 * Need to run as early as possible, to initialize the
 	 * lockdep hash:
@@ -530,6 +532,8 @@ asmlinkage __visible void __init start_kernel(void)
 	build_all_zonelists(NULL, NULL);
 	page_alloc_init();
 
+	early_printk("Early Kernel command line: %s\n", boot_command_line);
+
 	pr_notice("Kernel command line: %s\n", boot_command_line);
 	parse_early_param();
 	after_dashes = parse_args("Booting kernel",


-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk as early as possible
  2015-06-08  9:33   ` Borislav Petkov
@ 2015-06-09  9:19     ` Alexander Kuleshov
  2015-06-09  9:43       ` Borislav Petkov
  0 siblings, 1 reply; 7+ messages in thread
From: Alexander Kuleshov @ 2015-06-09  9:19 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Andy Shevchenko,
	LKML, Greg Kroah-Hartman, Mark Rustad, Yinghai Lu

2015-06-08 15:33 GMT+06:00 Borislav Petkov <bp@suse.de>:
> On Sun, Jun 07, 2015 at 08:14:37PM +0600, Alexander Kuleshov wrote:
>> diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
>> index 1e5f064..769d411 100644
>> --- a/arch/x86/kernel/head64.c
>> +++ b/arch/x86/kernel/head64.c
>> @@ -174,7 +174,12 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
>>
>>       setup_builtin_cmdline();
>>
>> +     lockdep_init();
>
> So you've added that lockdep_init() call here and above on the 32-bit
> path and haven't removed the one in start_kernel().
>

Hello Borislav,

Yes, I've left the lockdep_init in the start_kernel because there are a
couple architectures (arm,arm64 and etc...) who have support of the lockdep,
but have do not call lockdep_init in their architecture-specific code from the
arch/*.

> * Then, your patches don't apply. Something garbles them insanely so that
> not even fuzzy, ignore-context patch --merge works. Please fix your
> setup. For that, send your patches to yourself and try applying them.
> Send them out only if they apply cleanly.
>
> And do them against tip/master or latest Linus rc, alternatively.

Yes, sorry, will fix it.

> * To that patchset: I did the diff below ontop of yours to check whether
> that early printk actually works.
>
> And it doesn't on my test box here.
>
> The beginning of my dmesg contains:
>
> [    0.000000] bootconsole [earlyser0] enabled
> [    0.000000] Initializing cgroup subsys cpuset
> [    0.000000] Initializing cgroup subsys cpu
> [    0.000000] Initializing cgroup subsys cpuacct
> [    0.000000] Linux version 4.1.0-rc6+ (root@gondor) (gcc version 4.9.1 (Debian 4.9.1-19) ) #2 SMP PREEMPT Mon Jun 8 11:10:00 CEST 2015
> [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.1.0-rc6+ root=/dev/sda7 ro earlyprintk=ttyS0,115200 console=ttyS0,115200 console=tty0 root=/dev/sda7 log_buf_len=10M resume=/dev/sda5 no_console_suspend ignore_loglevel
> [    0.000000] KERNEL supported cpus:
> [    0.000000]   Intel GenuineIntel
> [    0.000000]   AMD AuthenticAMD
> [    0.000000]   Centaur CentaurHauls
> [    0.000000] x86/fpu: xstate_offset[2]: 0240, xstate_sizes[2]: 0100
> [    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
> [    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
> [    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
> [    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 0x340 bytes, using 'standard' format.
> [    0.000000] x86/fpu: Using 'eager' FPU context switches.
> [    0.000000] e820: BIOS-provided physical RAM map:
> ...
>
> and I have CONFIG_EARLY_PRINTK=y. So provided I'm not missing anything,
> I'd say you'd need to do more staring.
>

I've tested this and does not see early_printk output too on the hardware, but
only with qemu when I setup serial connection... The problem here that the
early_printk function does not use the log_buf to store its messages
as it printk does.

How to be with this? Is early_printk must to store its messages in the log_buf?

Thank you.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk as early as possible
  2015-06-09  9:19     ` Alexander Kuleshov
@ 2015-06-09  9:43       ` Borislav Petkov
  0 siblings, 0 replies; 7+ messages in thread
From: Borislav Petkov @ 2015-06-09  9:43 UTC (permalink / raw)
  To: Alexander Kuleshov
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Andy Shevchenko,
	LKML, Greg Kroah-Hartman, Mark Rustad, Yinghai Lu

On Tue, Jun 09, 2015 at 03:19:38PM +0600, Alexander Kuleshov wrote:
> I've tested this and does not see early_printk output too on the
> hardware, but only with qemu when I setup serial connection... The
> problem here that the early_printk function does not use the log_buf
> to store its messages as it printk does.
>
> How to be with this?

Well, as I said, you'd need to do more staring. You need to find out
why it doesn't work. If it fixable, then fix it. Remember, you want for
early_printk() to work that early.

-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-06-09  9:44 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-07 14:13 [PATCH v10 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible Alexander Kuleshov
2015-06-07 14:14 ` [PATCH v10 1/3] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
2015-06-07 14:14 ` [PATCH v10 2/3] x86/setup: handle builtin command line as early as possible Alexander Kuleshov
2015-06-07 14:14 ` [PATCH v10 3/3] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
2015-06-08  9:33   ` Borislav Petkov
2015-06-09  9:19     ` Alexander Kuleshov
2015-06-09  9:43       ` Borislav Petkov

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 NNTP newsgroup(s).