Patchwork [uq/master] apic: Fix legacy vmstate loading for KVM

login
register
mail settings
Submitter Jan Kiszka
Date Feb. 5, 2012, 11:45 a.m.
Message ID <4F2E6BD0.8000908@web.de>
Download mbox | patch
Permalink /patch/139627/
State New
Headers show

Comments

Jan Kiszka - Feb. 5, 2012, 11:45 a.m.
From: Jan Kiszka <jan.kiszka@siemens.com>

Also in case of loading pre-vmstate machines, we also need to open-code
the reading of the timer expires value and instead call the post_load
callback to apply it (or not). This fixes loading of legacy states into
the KVM APIC.

Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/apic_common.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
Marcelo Tosatti - Feb. 8, 2012, 4:40 p.m.
On Sun, Feb 05, 2012 at 12:45:20PM +0100, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Also in case of loading pre-vmstate machines, we also need to open-code
> the reading of the timer expires value and instead call the post_load
> callback to apply it (or not). This fixes loading of legacy states into
> the KVM APIC.
> 
> Reported-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>

Applied, thanks.

Patch

diff --git a/hw/apic_common.c b/hw/apic_common.c
index 26991b4..8373d79 100644
--- a/hw/apic_common.c
+++ b/hw/apic_common.c
@@ -188,6 +188,7 @@  static void apic_reset_common(DeviceState *d)
 static int apic_load_old(QEMUFile *f, void *opaque, int version_id)
 {
     APICCommonState *s = opaque;
+    APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
     int i;
 
     if (version_id > 2) {
@@ -220,7 +221,11 @@  static int apic_load_old(QEMUFile *f, void *opaque, int version_id)
     s->next_time = qemu_get_be64(f);
 
     if (version_id >= 2) {
-        qemu_get_timer(f, s->timer);
+        s->timer_expiry = qemu_get_be64(f);
+    }
+
+    if (info->post_load) {
+        info->post_load(s);
     }
     return 0;
 }