From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQtYX-00086D-I9 for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:45:13 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQtYS-00080d-KU for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:45:12 -0400 Received: from [199.232.76.173] (port=53642 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQtYS-00080X-F6 for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:45:08 -0400 Received: from an-out-0708.google.com ([209.85.132.248]:26606) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MQtYS-0003ii-2u for qemu-devel@nongnu.org; Tue, 14 Jul 2009 21:45:08 -0400 Received: by an-out-0708.google.com with SMTP id c38so1619957ana.37 for ; Tue, 14 Jul 2009 18:45:07 -0700 (PDT) Message-ID: <4A5D34A1.2020301@codemonkey.ws> Date: Tue, 14 Jul 2009 20:45:05 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Initialize PS2 keyboard / mouse state on reset References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dinesh Subhraveti Cc: Tomasz Chmielewski , qemu-devel@nongnu.org, Marcelo Tosatti Dinesh Subhraveti wrote: > Currently only common PS2 state is initialized, leaving keyboard and > mouse specific state to contain stale values. > And... this fixes the bug where some Linux guests are unable to detect the keyboard after a reboot due to the PS/2 queue being full. In the future, please make sure to include more information in commit messages. Thanks for the patch! Regards, Anthony Liguori > Signed-off-by: Dinesh Subhraveti > > --- > diff --git a/hw/ps2.c b/hw/ps2.c > index fb77005..0915b9f 100644 > --- a/hw/ps2.c > +++ b/hw/ps2.c > @@ -488,9 +488,8 @@ void ps2_write_mouse(void *opaque, int val) > } > } > > -static void ps2_reset(void *opaque) > +static void ps2_common_reset(PS2State *s) > { > - PS2State *s = (PS2State *)opaque; > PS2Queue *q; > s->write_cmd = -1; > q = &s->queue; > @@ -500,6 +499,33 @@ static void ps2_reset(void *opaque) > s->update_irq(s->update_arg, 0); > } > > +static void ps2_kbd_reset(void *opaque) > +{ > + PS2KbdState *s = (PS2KbdState *) opaque; > + > + ps2_common_reset(&s->common); > + s->scan_enabled = 0; > + s->translate = 0; > + s->scancode_set = 0; > +} > + > +static void ps2_mouse_reset(void *opaque) > +{ > + PS2MouseState *s = (PS2MouseState *) opaque; > + > + ps2_common_reset(&s->common); > + s->mouse_status = 0; > + s->mouse_resolution = 0; > + s->mouse_sample_rate = 0; > + s->mouse_wrap = 0; > + s->mouse_type = 0; > + s->mouse_detect_state = 0; > + s->mouse_dx = 0; > + s->mouse_dy = 0; > + s->mouse_dz = 0; > + s->mouse_buttons = 0; > +} > + > static void ps2_common_save (QEMUFile *f, PS2State *s) > { > qemu_put_be32 (f, s->write_cmd); > @@ -590,10 +616,10 @@ void *ps2_kbd_init(void (*update_irq)(void *, > int), void *update_arg) > s->common.update_irq = update_irq; > s->common.update_arg = update_arg; > s->scancode_set = 2; > - ps2_reset(&s->common); > + ps2_kbd_reset(s); > register_savevm("ps2kbd", 0, 3, ps2_kbd_save, ps2_kbd_load, s); > qemu_add_kbd_event_handler(ps2_put_keycode, s); > - qemu_register_reset(ps2_reset, &s->common); > + qemu_register_reset(ps2_kbd_reset, s); > return s; > } > > @@ -603,9 +629,9 @@ void *ps2_mouse_init(void (*update_irq)(void *, > int), void *update_arg) > > s->common.update_irq = update_irq; > s->common.update_arg = update_arg; > - ps2_reset(&s->common); > + ps2_mouse_reset(s); > register_savevm("ps2mouse", 0, 2, ps2_mouse_save, ps2_mouse_load, s); > qemu_add_mouse_event_handler(ps2_mouse_event, s, 0, "QEMU PS/2 Mouse"); > - qemu_register_reset(ps2_reset, &s->common); > + qemu_register_reset(ps2_mouse_reset, s); > return s; > } > > >