Re: [origin tree boot hang] [PATCH] Revert "early_printk:Allowmorethan one early console"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Linus Torvalds wrote:
> On Wed, 23 Sep 2009, Jason Wessel wrote:
>   
>> Perhaps you will consider adding this patch to your tree?   It fixes the
>> specific case you mentioned.  It will still allow the board to boot and
>> instead of crashing, print a warning on the second instance.
>>     
>
> Ugh. This looks totally bogus.
>
> Why don't you just add CON_REGISTERED to the console flags, and do
>
> 	/* Already registered? */
> 	if (early_console->flags & CON_REGISTERED)
> 		return;
> 	early_console->flags |= CON_REGISTERED;
>
> there instead? That whole "loop over existing consoles to check their 
> names" looks silly and broken, and you're already playing with the flags 
> in there (CON_BOOT).
>   

Seems reasonable to me.  We don't even have to add a new flag, because
we already have the index set to != -1 when the console registration
succeeds.

Here is the revised patch.

Jason.


>From 66081d4a28cb17f58b09fe05a5a9c8441fc701ac Mon Sep 17 00:00:00 2001
From: Jason Wessel <jason.wessel@xxxxxxxxxxxxx>
Date: Wed, 23 Sep 2009 18:11:31 -0500
Subject: [PATCH 1/1] early_printk: Protect against using the same device twice

If you use the kernel argument:

earlyprintk=serial,ttyS0,115200

This will cause a recursive crash.  Instead warn the end user that they
specified the device a second time.

Signed-off-by: Jason Wessel <jason.wessel@xxxxxxxxxxxxx>
---
 arch/x86/kernel/early_printk.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
index 2acfd3f..41fd965 100644
--- a/arch/x86/kernel/early_printk.c
+++ b/arch/x86/kernel/early_printk.c
@@ -178,6 +178,11 @@ asmlinkage void early_printk(const char *fmt, ...)
 
 static inline void early_console_register(struct console *con, int keep_early)
 {
+	if (early_console->index != -1) {
+		printk(KERN_CRIT "ERROR: earlyprintk= %s already used\n",
+		       con->name);
+		return;
+	}
 	early_console = con;
 	if (keep_early)
 		early_console->flags &= ~CON_BOOT;
-- 
1.6.3.1.9.g95405b


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux