Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 340e01248478ba8b78a6d4d1809b1eff > files > 160

kvm-83-270.el5_11.src.rpm

From e3d367cdb506034f784c83fef8e154622aa3702e Mon Sep 17 00:00:00 2001
From: Eduardo Habkost <ehabkost@redhat.com>
Date: Mon, 3 Aug 2009 14:00:32 -0300
Subject: [PATCH] Initialize PS2 keyboard / mouse state on reset

https://bugzilla.redhat.com/515275

This is a backport of qemu commit ef74679a810fe6858f625b9d52b68cc3fc61eb3d.

I don't know if this bug should be considered a RHEL-5.4 blocker. If not, then
this is a RHEL-5.5 patch submission.  :)

Log message from the patch added on Bugzilla:

    Initialize PS2 keyboard / mouse state on reset

    Currently only common PS2 state is initialized, leaving keyboard and
    mouse specific state to contain stale values.

    Signed-off-by: Dinesh Subhraveti <dineshs@us.ibm.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    Signed-off-by: Ram Pai <linuxram@us.ibm.com>

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Bugzilla: 515275
RH-Upstream-status: backport-from-upstream
Message-Id: <1249318832-29302-1-git-send-email-ehabkost@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
---
 qemu/hw/ps2.c |   38 ++++++++++++++++++++++++++++++++------
 1 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/qemu/hw/ps2.c b/qemu/hw/ps2.c
index 5a9ffde..b415316 100644
--- a/qemu/hw/ps2.c
+++ b/qemu/hw/ps2.c
@@ -584,9 +584,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;
@@ -596,6 +595,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);
@@ -794,10 +820,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, 4, 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);
 #ifdef CONFIG_SPICE
     regitser_keyboard(s);
 #endif
@@ -810,10 +836,10 @@ 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);
 #ifdef CONFIG_SPICE
     regitser_mouse(s);
 #endif
-- 
1.6.3.rc4.29.g8146