diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-02-12 09:21:57 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-02-12 09:21:57 +0000 |
commit | d652a9595460cfc81afeb66c17aef7adedfb9175 (patch) | |
tree | bcdfea3dfaa9779c0254ecdb163a1b2ecfd59156 /xen/common/keyhandler.c | |
parent | 98650e12c1241d6a72f6d3e6a4f8d16faaf9f9c5 (diff) | |
download | xen-d652a9595460cfc81afeb66c17aef7adedfb9175.tar.gz xen-d652a9595460cfc81afeb66c17aef7adedfb9175.tar.bz2 xen-d652a9595460cfc81afeb66c17aef7adedfb9175.zip |
keyhandler: Do not serialise keyhandlers; increase scratch array size.
Although serialising keyhandlers is safer, and in particular
protects access to shared heyhandler_scratch[], in debug scenarios it
is probably better to 'have a go' when requested - and assume the user
knows what they are doing.
Meanwhile, increase scratch array size to 1024. That's enough for more
than a dozen lines of 80-column text, and should be plenty in any
practical situation.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/common/keyhandler.c')
-rw-r--r-- | xen/common/keyhandler.c | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c index 78daf45a3d..e3e64a1953 100644 --- a/xen/common/keyhandler.c +++ b/xen/common/keyhandler.c @@ -20,7 +20,7 @@ static struct keyhandler *key_table[256]; static unsigned char keypress_key; -char keyhandler_scratch[100]; +char keyhandler_scratch[1024]; static void keypress_action(unsigned long unused) { @@ -31,7 +31,6 @@ static DECLARE_TASKLET(keypress_tasklet, keypress_action, 0); void handle_keypress(unsigned char key, struct cpu_user_regs *regs) { - static bool_t executing_handler; struct keyhandler *h; if ( (h = key_table[key]) == NULL ) @@ -39,18 +38,9 @@ void handle_keypress(unsigned char key, struct cpu_user_regs *regs) if ( !in_irq() || h->irq_callback ) { - /* - * No concurrent handler execution: prevents garbled console and - * protects keyhandler_scratch[]. - */ - if ( test_and_set_bool(executing_handler) ) - return; - wmb(); console_start_log_everything(); h->irq_callback ? (*h->u.irq_fn)(key, regs) : (*h->u.fn)(key); console_end_log_everything(); - wmb(); - executing_handler = 0; } else { |