2010-12-10 20:42:19

by Jason Wessel

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

=== NOTES excluded from the real commit ===

Dmitry, I added this commit into kgdb-next and I will send a pull
request to Linus Monday, unless someone comes up with an objection or
a different implementation.

Thanks,
Jason.

=== END NOTES ===

The commit 111c182340cd22e238ab1cc6564df336c6ebd7cb 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 input state routine which intended to send release key
events for any key that was depressed on entry to the debugger. A
simple fix 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]>
CC: Dmitry Torokhov <[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


2010-12-10 21:49:17

by Dmitry Torokhov

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

On Fri, Dec 10, 2010 at 02:40:43PM -0600, Jason Wessel wrote:
> === NOTES excluded from the real commit ===
>
> Dmitry, I added this commit into kgdb-next and I will send a pull
> request to Linus Monday, unless someone comes up with an objection or
> a different implementation.

Yes, I think it makes sense. Such an early oopses are unlikely to have
input devices fully bound anyway so they'll get "reset" natually.

Thanks.

--
Dmitry