lkml.org 
[lkml]   [2009]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [origin tree boot hang] [PATCH] Revert "early_printk:Allowmorethan one early console"
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@windriver.com>
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@windriver.com>
---
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
\
 
 \ /
  Last update: 2009-09-24 01:17    [W:1.261 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site