Patchwork [34/49] x86: add pending_irq_vmstate to the state

login
register
mail settings
Submitter Juan Quintela
Date Sept. 29, 2009, 8:48 p.m.
Message ID <e48ee2fda295bfda2a34880678edc11bd47d6cdb.1254255997.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/34486/
State Superseded
Headers show

Comments

Juan Quintela - Sept. 29, 2009, 8:48 p.m.
It is needed to save the interrupt_bitmap

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 target-i386/cpu.h     |    1 +
 target-i386/machine.c |   16 +++++++---------
 2 files changed, 8 insertions(+), 9 deletions(-)

Patch

diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 18fadf0..e13f87b 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -686,6 +686,7 @@  typedef struct CPUX86State {

     /* For KVM */
     uint64_t interrupt_bitmap[256 / 64];
+    int32_t pending_irq_vmstate;
     uint32_t mp_state;

     /* in order to simplify APIC support, we leave this pointer to the
diff --git a/target-i386/machine.c b/target-i386/machine.c
index 6309ea7..e1621d4 100644
--- a/target-i386/machine.c
+++ b/target-i386/machine.c
@@ -27,7 +27,6 @@  void cpu_save(QEMUFile *f, void *opaque)
 {
     CPUState *env = opaque;
     uint16_t fpregs_format;
-    int32_t pending_irq;
     int i, bit;

     cpu_synchronize_state(env);
@@ -142,15 +141,15 @@  void cpu_save(QEMUFile *f, void *opaque)

     /* There can only be one pending IRQ set in the bitmap at a time, so try
        to find it and save its number instead (-1 for none). */
-    pending_irq = -1;
+    env->pending_irq_vmstate = -1;
     for (i = 0; i < ARRAY_SIZE(env->interrupt_bitmap); i++) {
         if (env->interrupt_bitmap[i]) {
             bit = ctz64(env->interrupt_bitmap[i]);
-            pending_irq = i * 64 + bit;
+            env->pending_irq_vmstate = i * 64 + bit;
             break;
         }
     }
-    qemu_put_sbe32s(f, &pending_irq);
+    qemu_put_sbe32s(f, &env->pending_irq_vmstate);
     qemu_put_be32s(f, &env->mp_state);
     qemu_put_be64s(f, &env->tsc);

@@ -197,7 +196,6 @@  int cpu_load(QEMUFile *f, void *opaque, int version_id)
     CPUState *env = opaque;
     int i, guess_mmx;
     uint16_t fpregs_format;
-    int32_t pending_irq;

     cpu_synchronize_state(env);
     if (version_id < 3 || version_id > CPU_SAVE_VERSION)
@@ -343,11 +341,11 @@  int cpu_load(QEMUFile *f, void *opaque, int version_id)
     }

     if (version_id >= 9) {
-        qemu_get_sbe32s(f, &pending_irq);
+        qemu_get_sbe32s(f, &env->pending_irq_vmstate);
         memset(&env->interrupt_bitmap, 0, sizeof(env->interrupt_bitmap));
-        if (pending_irq >= 0) {
-            env->interrupt_bitmap[pending_irq / 64] |=
-                (uint64_t)1 << (pending_irq % 64);
+        if (env->pending_irq_vmstate >= 0) {
+            env->interrupt_bitmap[env->pending_irq_vmstate / 64] |=
+                (uint64_t)1 << (env->pending_irq_vmstate % 64);
         }
         qemu_get_be32s(f, &env->mp_state);
         qemu_get_be64s(f, &env->tsc);