From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:38596) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RLMi7-000424-IH for qemu-devel@nongnu.org; Tue, 01 Nov 2011 18:21:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RLMi6-0000bq-CP for qemu-devel@nongnu.org; Tue, 01 Nov 2011 18:21:35 -0400 Received: from mail-gy0-f173.google.com ([209.85.160.173]:44143) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RLMi6-0000bd-9O for qemu-devel@nongnu.org; Tue, 01 Nov 2011 18:21:34 -0400 Received: by gya6 with SMTP id 6so4127878gya.4 for ; Tue, 01 Nov 2011 15:21:33 -0700 (PDT) Message-ID: <4EB070EA.1060600@codemonkey.ws> Date: Tue, 01 Nov 2011 17:21:30 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1318851454-22335-1-git-send-email-quintela@redhat.com> In-Reply-To: <1318851454-22335-1-git-send-email-quintela@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4] ps2: migrate ledstate List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Juan Quintela Cc: qemu-devel@nongnu.org, cfergeau@redhat.com On 10/17/2011 06:37 AM, Juan Quintela wrote: > From: Christophe Fergeau > > Make the ps2 device track its ledstate so that we can migrate it. > Otherwise it gets lost across migration, and spice-server gets > confused about the actual keyboard state and sends bogus > caps/scroll/num key events. This fixes RH bug #729294 > > We only need to migrate the state when it is different of the default > one (0). > > Signed-off-by: Christophe Fergeau > Signed-off-by: Juan Quintela Applied. Thanks. Regards, Anthony Liguori > --- > hw/ps2.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 44 insertions(+), 2 deletions(-) > > diff --git a/hw/ps2.c b/hw/ps2.c > index 24228c1..1d9057b 100644 > --- a/hw/ps2.c > +++ b/hw/ps2.c > @@ -92,6 +92,7 @@ typedef struct { > not the keyboard controller. */ > int translate; > int scancode_set; /* 1=XT, 2=AT, 3=PS/2 */ > + int ledstate; > } PS2KbdState; > > typedef struct { > @@ -195,11 +196,17 @@ uint32_t ps2_read_data(void *opaque) > return val; > } > > +static void ps2_set_ledstate(PS2KbdState *s, int ledstate) > +{ > + s->ledstate = ledstate; > + kbd_put_ledstate(ledstate); > +} > + > static void ps2_reset_keyboard(PS2KbdState *s) > { > s->scan_enabled = 1; > s->scancode_set = 2; > - kbd_put_ledstate(0); > + ps2_set_ledstate(s, 0); > } > > void ps2_write_keyboard(void *opaque, int val) > @@ -274,7 +281,7 @@ void ps2_write_keyboard(void *opaque, int val) > s->common.write_cmd = -1; > break; > case KBD_CMD_SET_LEDS: > - kbd_put_ledstate(val); > + ps2_set_ledstate(s, val); > ps2_queue(&s->common, KBD_REPLY_ACK); > s->common.write_cmd = -1; > break; > @@ -557,6 +564,33 @@ static const VMStateDescription vmstate_ps2_common = { > } > }; > > +static bool ps2_keyboard_ledstate_needed(void *opaque) > +{ > + PS2KbdState *s = opaque; > + > + return s->ledstate != 0; /* 0 is default state */ > +} > + > +static int ps2_kbd_ledstate_post_load(void *opaque, int version_id) > +{ > + PS2KbdState *s = opaque; > + > + kbd_put_ledstate(s->ledstate); > + return 0; > +} > + > +static const VMStateDescription vmstate_ps2_keyboard_ledstate = { > + .name = "ps2kbd/ledstate", > + .version_id = 3, > + .minimum_version_id = 2, > + .minimum_version_id_old = 2, > + .post_load = ps2_kbd_ledstate_post_load, > + .fields = (VMStateField []) { > + VMSTATE_INT32(ledstate, PS2KbdState), > + VMSTATE_END_OF_LIST() > + } > +}; > + > static int ps2_kbd_post_load(void* opaque, int version_id) > { > PS2KbdState *s = (PS2KbdState*)opaque; > @@ -578,6 +612,14 @@ static const VMStateDescription vmstate_ps2_keyboard = { > VMSTATE_INT32(translate, PS2KbdState), > VMSTATE_INT32_V(scancode_set, PS2KbdState,3), > VMSTATE_END_OF_LIST() > + }, > + .subsections = (VMStateSubsection []) { > + { > + .vmsd =&vmstate_ps2_keyboard_ledstate, > + .needed = ps2_keyboard_ledstate_needed, > + }, { > + /* empty */ > + } > } > }; >