2010-12-14 05:07:11

by Jason Wessel

[permalink] [raw]
Subject: [GIT PULL] kgdb/kdb tree for 2.6.37-rc5

Linus, please pull the for_linus branch to pick up a crash regression
fix for a regression introduced earlying the -rc cycle.

git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb.git for_linus

Thanks,
Jason.

---
The following changes since commit e8a7e48bb248a1196484d3f8afa53bded2b24e71:
Linus Torvalds (1):
Linux 2.6.37-rc4

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb.git for_linus

Jason Wessel (1):
kgdboc,input: Fix regression with keyboard release key and early debugging

drivers/serial/kgdboc.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)


2010-12-14 05:07:10

by Jason Wessel

[permalink] [raw]
Subject: [PATCH] kgdboc,input: Fix regression with keyboard release key and early debugging

The commit 111c182340cd22e238ab1cc6564df336c6ebd7cb (kgdboc: reset
input devices (keyboards) when exiting debugger) introduced a
regression in early debugging such that you get a kernel oops on
continue (with the go command) if you boot a kernel with:

earlyprintk=vga ekgdboc=kbd kgdbwait

The restore kgdboc_restore_input() routine schedules work for the
purpose of sending key release events for any keys that were in the
depressed state prior to entering the kernel debugger. A simple fix
to the crash is to not invoke the schedule_work() if the kernel
system_state is anything other than SYSTEM_RUNNING.

Signed-off-by: Jason Wessel <[email protected]>
Acked-by: Dmitry Torokhov <[email protected]>
Reviewed-by: Sergei Shtylyov <[email protected]>
---
drivers/serial/kgdboc.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/serial/kgdboc.c b/drivers/serial/kgdboc.c
index 3374618..25a8bc5 100644
--- a/drivers/serial/kgdboc.c
+++ b/drivers/serial/kgdboc.c
@@ -90,7 +90,8 @@ static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper);

static void kgdboc_restore_input(void)
{
- schedule_work(&kgdboc_restore_input_work);
+ if (likely(system_state == SYSTEM_RUNNING))
+ schedule_work(&kgdboc_restore_input_work);
}

static int kgdboc_register_kbd(char **cptr)
--
1.7.0.4