kdb
[Top] [All Lists]

Re: [kdb] KDB makes Nehalem hang at early boot until key press

To: Martin Hicks <mort@xxxxxxx>
Subject: Re: [kdb] KDB makes Nehalem hang at early boot until key press
From: Thomas Renninger <trenn@xxxxxxx>
Date: Fri, 6 Nov 2009 22:26:50 +0100
Cc: kdb@xxxxxxxxxxx
In-reply-to: <20091102145752.GG11632@xxxxxxxxxxxxxxxxxxxxxxxxx>
References: <200910301102.57634.trenn@xxxxxxx> <200911010148.01214.trenn@xxxxxxx> <20091102145752.GG11632@xxxxxxxxxxxxxxxxxxxxxxxxx>
User-agent: KMail/1.9.10
On Monday 02 November 2009 03:57:52 pm Martin Hicks wrote:
> Okay, I found a bug that SGI has hacked around on our boxborough-EX
> machines that looks similar.  The bug wasn't assigned to me, so I didn't
> know it was hacked around. :)
>
> Can you try this (may not apply.  I cut & pasted)?  Obviously it's a
> terribly patch, but it'll show us if it's the same problem.
I think I got it.
Below patch workarounds the problem.
I will verify on Mo.

I expect this is related that these machines do not have a i8042 chip?
I wonder how sane it is to toggle the LEDs at init time at all
(especially because this is also done with kdb=off).

Do you consider this to be a "real safe fix"?
Does someone have better ideas (remove whole led toggling init code,
check for i8042,...).
For SLE11-SP1 we do a kernel version jump and it still takes some time,
for 11.2 and SLE11 I need something really trivial...

Thanks,

      Thomas

From: Thomas Renninger <trenn@xxxxxxx>
Subject: X86 KDB: Reduce timeout for key blinking LEDs
Patch-Mainline: not yet
References: bnc#528811

Looks like on some boards without i8042 chip, the
whole loop is gone through which takes several minutes.

Signed-off-by: Thomas Renninger <trenn@xxxxxxx>

---
 arch/x86/kdb/kdba_io.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: linux-2.6.31-master/arch/x86/kdb/kdba_io.c
===================================================================
--- linux-2.6.31-master.orig/arch/x86/kdb/kdba_io.c
+++ linux-2.6.31-master/arch/x86/kdb/kdba_io.c
@@ -303,10 +303,10 @@ static void
 kdb_kbdsend(unsigned char byte)
 {
        int timeout;
-       for (timeout = 200 * 1000; timeout && (inb(KBD_STATUS_REG) & 
KBD_STAT_IBF); timeout--);
+       for (timeout = 200; timeout && (inb(KBD_STATUS_REG) & KBD_STAT_IBF); 
timeout--);
        outb(byte, KBD_DATA_REG);
        udelay(40);
-       for (timeout = 200 * 1000; timeout && (~inb(KBD_STATUS_REG) & 
KBD_STAT_OBF); timeout--);
+       for (timeout = 200; timeout && (~inb(KBD_STATUS_REG) & KBD_STAT_OBF); 
timeout--);
        inb(KBD_DATA_REG);
        udelay(40);
 }

<Prev in Thread] Current Thread [Next in Thread>