mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-24 02:52:38 +00:00
panic: keep blinking in spite of long spin timer mode
To keep panic_timeout accuracy when running under a hypervisor, the current implementation only spins on long time (1 second) calls to mdelay. That brings a good effect, but the problem is the keyboard LEDs don't blink at all on that situation. This patch changes to call to panic_blink_enter() between every mdelay and keeps blinking in spite of long spin timer mode. The time to call to mdelay is now 100ms. Even this change will keep panic_timeout accuracy enough when running under a hypervisor. Signed-off-by: TAMUKI Shoichi <tamuki@linet.gr.jp> Cc: Ben Dooks <ben-linux@fluff.org> Cc: Russell King <linux@arm.linux.org.uk> Acked-by: Dmitry Torokhov <dtor@mail.ru> Cc: Anton Blanchard <anton@samba.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
bebf8cfaea
commit
c7ff0d9c92
@@ -61,10 +61,6 @@ static bool i8042_noloop;
|
||||
module_param_named(noloop, i8042_noloop, bool, 0);
|
||||
MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port");
|
||||
|
||||
static unsigned int i8042_blink_frequency = 500;
|
||||
module_param_named(panicblink, i8042_blink_frequency, uint, 0600);
|
||||
MODULE_PARM_DESC(panicblink, "Frequency with which keyboard LEDs should blink when kernel panics");
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
static bool i8042_dritek;
|
||||
module_param_named(dritek, i8042_dritek, bool, 0);
|
||||
@@ -1030,8 +1026,8 @@ static void i8042_controller_reset(void)
|
||||
|
||||
|
||||
/*
|
||||
* i8042_panic_blink() will flash the keyboard LEDs and is called when
|
||||
* kernel panics. Flashing LEDs is useful for users running X who may
|
||||
* i8042_panic_blink() will turn the keyboard LEDs on or off and is called
|
||||
* when kernel panics. Flashing LEDs is useful for users running X who may
|
||||
* not see the console and will help distingushing panics from "real"
|
||||
* lockups.
|
||||
*
|
||||
@@ -1041,22 +1037,12 @@ static void i8042_controller_reset(void)
|
||||
|
||||
#define DELAY do { mdelay(1); if (++delay > 10) return delay; } while(0)
|
||||
|
||||
static long i8042_panic_blink(long count)
|
||||
static long i8042_panic_blink(int state)
|
||||
{
|
||||
long delay = 0;
|
||||
static long last_blink;
|
||||
static char led;
|
||||
char led;
|
||||
|
||||
/*
|
||||
* We expect frequency to be about 1/2s. KDB uses about 1s.
|
||||
* Make sure they are different.
|
||||
*/
|
||||
if (!i8042_blink_frequency)
|
||||
return 0;
|
||||
if (count - last_blink < i8042_blink_frequency)
|
||||
return 0;
|
||||
|
||||
led ^= 0x01 | 0x04;
|
||||
led = (state) ? 0x01 | 0x04 : 0;
|
||||
while (i8042_read_status() & I8042_STR_IBF)
|
||||
DELAY;
|
||||
dbg("%02x -> i8042 (panic blink)", 0xed);
|
||||
@@ -1069,7 +1055,6 @@ static long i8042_panic_blink(long count)
|
||||
dbg("%02x -> i8042 (panic blink)", led);
|
||||
i8042_write_data(led);
|
||||
DELAY;
|
||||
last_blink = count;
|
||||
return delay;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user