All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99
@ 2015-02-09 22:40 Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 1/9] macio.c: include parent PCIDevice state in VMStateDescription Mark Cave-Ayland
                   ` (9 more replies)
  0 siblings, 10 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

This patchset fixes up various bugs in loadvm/savevm for -M g3beige and
-M mac99 so that it is becomes possible to save and restore image snapshots.

The focus of this patchset is on -M g3beige since this matches the majority
of my test images, but there were some easy fixes to be made to -M mac99
at the same time.

With this patchset applied both -M g3beige and -M mac99 images can be
saved/restored whilst booted into OpenBIOS with no issues. I tested -M g3beige
with a paused, disk-inactive Darwin 6 image and was able to resume
successfully which was good enough for my needs.

I noticed some hangs can still occur when trying to restore an image
where the disk is active which makes me believe that there is still some
extra macio/dbdma state which needs to be included if someone is interested
enough to pursue this further.

Most of the patches are straightforward except for patch 4 which came out of
a discussion on-list between Alex and Paolo, and patch 5 which is a similar
error except this time for the MSR register.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

v3:
- Rebase onto master
- Add ULL suffix to (1 << MSR_TGPR) constant in patch 5
- Add openpic vmstate conversion patches

v2:
- Minor subject line changes for patches 4+5
- Update patches 4+5 based upon feedback from Paolo
- Fix line width exceeding 80 characters in patch 2

Mark Cave-Ayland (9):
  macio.c: include parent PCIDevice state in VMStateDescription
  adb.c: include ADBDevice parent state in KBDState and MouseState
  cuda.c: include adb_poll_timer in VMStateDescription
  target-ppc: move sdr1 value change detection logic to
    helper_store_sdr1()
  target-ppc: force update of msr bits in cpu_post_load
  openpic: fix segfault on -M mac99 savevm
  openpic: fix up loadvm under -M mac99
  openpic: switch IRQQueue queue from inline to bitmap
  openpic: convert to vmstate

 hw/input/adb.c           |   22 +++-
 hw/intc/openpic.c        |  276 ++++++++++++++++++++++------------------------
 hw/misc/macio/cuda.c     |    5 +-
 hw/misc/macio/macio.c    |   24 ++++
 target-ppc/machine.c     |    8 +-
 target-ppc/misc_helper.c |    7 +-
 target-ppc/mmu_helper.c  |   35 +++---
 7 files changed, 206 insertions(+), 171 deletions(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 1/9] macio.c: include parent PCIDevice state in VMStateDescription
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 2/9] adb.c: include ADBDevice parent state in KBDState and MouseState Mark Cave-Ayland
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

This ensures that the macio PCI device is correctly configured when restoring
from a VM snapshot.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/macio/macio.c |   24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index e0f1e88..9bc3f2d 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -336,20 +336,44 @@ static void macio_instance_init(Object *obj)
     memory_region_add_subregion(&s->bar, 0x08000, dbdma_mem);
 }
 
+static const VMStateDescription vmstate_macio_oldworld = {
+    .name = "macio-oldworld",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_PCI_DEVICE(parent_obj.parent, OldWorldMacIOState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void macio_oldworld_class_init(ObjectClass *oc, void *data)
 {
     PCIDeviceClass *pdc = PCI_DEVICE_CLASS(oc);
+    DeviceClass *dc = DEVICE_CLASS(oc);
 
     pdc->init = macio_oldworld_initfn;
     pdc->device_id = PCI_DEVICE_ID_APPLE_343S1201;
+    dc->vmsd = &vmstate_macio_oldworld;
 }
 
+static const VMStateDescription vmstate_macio_newworld = {
+    .name = "macio-newworld",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_PCI_DEVICE(parent_obj.parent, NewWorldMacIOState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void macio_newworld_class_init(ObjectClass *oc, void *data)
 {
     PCIDeviceClass *pdc = PCI_DEVICE_CLASS(oc);
+    DeviceClass *dc = DEVICE_CLASS(oc);
 
     pdc->init = macio_newworld_initfn;
     pdc->device_id = PCI_DEVICE_ID_APPLE_UNI_N_KEYL;
+    dc->vmsd = &vmstate_macio_newworld;
 }
 
 static Property macio_properties[] = {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 2/9] adb.c: include ADBDevice parent state in KBDState and MouseState
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 1/9] macio.c: include parent PCIDevice state in VMStateDescription Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 3/9] cuda.c: include adb_poll_timer in VMStateDescription Mark Cave-Ayland
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

The parent ADBDevice contains the device id on the ADB bus. Make sure that
this state is included in both its subclasses since some clients (such as
OpenBIOS) reprogram each device id after enumeration.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/input/adb.c |   22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/hw/input/adb.c b/hw/input/adb.c
index 34c8058..a18eea2 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -118,6 +118,17 @@ static const TypeInfo adb_bus_type_info = {
     .instance_size = sizeof(ADBBusState),
 };
 
+static const VMStateDescription vmstate_adb_device = {
+    .name = "adb_device",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_INT32(devaddr, ADBDevice),
+        VMSTATE_INT32(handler, ADBDevice),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void adb_device_realizefn(DeviceState *dev, Error **errp)
 {
     ADBDevice *d = ADB_DEVICE(dev);
@@ -301,9 +312,10 @@ static int adb_kbd_request(ADBDevice *d, uint8_t *obuf,
 
 static const VMStateDescription vmstate_adb_kbd = {
     .name = "adb_kbd",
-    .version_id = 1,
-    .minimum_version_id = 1,
+    .version_id = 2,
+    .minimum_version_id = 2,
     .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(parent_obj, KBDState, 0, vmstate_adb_device, ADBDevice),
         VMSTATE_BUFFER(data, KBDState),
         VMSTATE_INT32(rptr, KBDState),
         VMSTATE_INT32(wptr, KBDState),
@@ -515,9 +527,11 @@ static void adb_mouse_reset(DeviceState *dev)
 
 static const VMStateDescription vmstate_adb_mouse = {
     .name = "adb_mouse",
-    .version_id = 1,
-    .minimum_version_id = 1,
+    .version_id = 2,
+    .minimum_version_id = 2,
     .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(parent_obj, MouseState, 0, vmstate_adb_device,
+                       ADBDevice),
         VMSTATE_INT32(buttons_state, MouseState),
         VMSTATE_INT32(last_buttons_state, MouseState),
         VMSTATE_INT32(dx, MouseState),
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 3/9] cuda.c: include adb_poll_timer in VMStateDescription
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 1/9] macio.c: include parent PCIDevice state in VMStateDescription Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 2/9] adb.c: include ADBDevice parent state in KBDState and MouseState Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 4/9] target-ppc: move sdr1 value change detection logic to helper_store_sdr1() Mark Cave-Ayland
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

Make sure that we include the adb_poll_timer when saving the VM state for
client OSs that use it, e.g. Darwin.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/macio/cuda.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 47d9771..f3984e3 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -638,8 +638,8 @@ static const VMStateDescription vmstate_cuda_timer = {
 
 static const VMStateDescription vmstate_cuda = {
     .name = "cuda",
-    .version_id = 1,
-    .minimum_version_id = 1,
+    .version_id = 2,
+    .minimum_version_id = 2,
     .fields = (VMStateField[]) {
         VMSTATE_UINT8(a, CUDAState),
         VMSTATE_UINT8(b, CUDAState),
@@ -660,6 +660,7 @@ static const VMStateDescription vmstate_cuda = {
         VMSTATE_UINT32(tick_offset, CUDAState),
         VMSTATE_STRUCT_ARRAY(timers, CUDAState, 2, 1,
                              vmstate_cuda_timer, CUDATimer),
+        VMSTATE_TIMER_PTR(adb_poll_timer, CUDAState),
         VMSTATE_END_OF_LIST()
     }
 };
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 4/9] target-ppc: move sdr1 value change detection logic to helper_store_sdr1()
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (2 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 3/9] cuda.c: include adb_poll_timer in VMStateDescription Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 5/9] target-ppc: force update of msr bits in cpu_post_load Mark Cave-Ayland
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

Otherwise when cpu_post_load calls ppc_store_sdr1() when restoring a VM
snapshot the value is deemed unchanged and so the internal env->htab*
variables aren't set correctly.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target-ppc/misc_helper.c |    7 ++++++-
 target-ppc/mmu_helper.c  |   35 +++++++++++++++--------------------
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/target-ppc/misc_helper.c b/target-ppc/misc_helper.c
index a577b3a..6b12ca8 100644
--- a/target-ppc/misc_helper.c
+++ b/target-ppc/misc_helper.c
@@ -77,8 +77,13 @@ void helper_msr_facility_check(CPUPPCState *env, uint32_t bit,
 
 void helper_store_sdr1(CPUPPCState *env, target_ulong val)
 {
+    PowerPCCPU *cpu = ppc_env_get_cpu(env);
+
     if (!env->external_htab) {
-        ppc_store_sdr1(env, val);
+        if (env->spr[SPR_SDR1] != val) {
+            ppc_store_sdr1(env, val);
+            tlb_flush(CPU(cpu), 1);
+        }
     }
 }
 
diff --git a/target-ppc/mmu_helper.c b/target-ppc/mmu_helper.c
index 660be7f..527c6ad 100644
--- a/target-ppc/mmu_helper.c
+++ b/target-ppc/mmu_helper.c
@@ -2036,31 +2036,26 @@ void ppc_tlb_invalidate_one(CPUPPCState *env, target_ulong addr)
 /* Special registers manipulation */
 void ppc_store_sdr1(CPUPPCState *env, target_ulong value)
 {
-    PowerPCCPU *cpu = ppc_env_get_cpu(env);
-
     qemu_log_mask(CPU_LOG_MMU, "%s: " TARGET_FMT_lx "\n", __func__, value);
     assert(!env->external_htab);
-    if (env->spr[SPR_SDR1] != value) {
-        env->spr[SPR_SDR1] = value;
+    env->spr[SPR_SDR1] = value;
 #if defined(TARGET_PPC64)
-        if (env->mmu_model & POWERPC_MMU_64) {
-            target_ulong htabsize = value & SDR_64_HTABSIZE;
+    if (env->mmu_model & POWERPC_MMU_64) {
+        target_ulong htabsize = value & SDR_64_HTABSIZE;
 
-            if (htabsize > 28) {
-                fprintf(stderr, "Invalid HTABSIZE 0x" TARGET_FMT_lx
-                        " stored in SDR1\n", htabsize);
-                htabsize = 28;
-            }
-            env->htab_mask = (1ULL << (htabsize + 18 - 7)) - 1;
-            env->htab_base = value & SDR_64_HTABORG;
-        } else
-#endif /* defined(TARGET_PPC64) */
-        {
-            /* FIXME: Should check for valid HTABMASK values */
-            env->htab_mask = ((value & SDR_32_HTABMASK) << 16) | 0xFFFF;
-            env->htab_base = value & SDR_32_HTABORG;
+        if (htabsize > 28) {
+            fprintf(stderr, "Invalid HTABSIZE 0x" TARGET_FMT_lx
+                    " stored in SDR1\n", htabsize);
+            htabsize = 28;
         }
-        tlb_flush(CPU(cpu), 1);
+        env->htab_mask = (1ULL << (htabsize + 18 - 7)) - 1;
+        env->htab_base = value & SDR_64_HTABORG;
+    } else
+#endif /* defined(TARGET_PPC64) */
+    {
+        /* FIXME: Should check for valid HTABMASK values */
+        env->htab_mask = ((value & SDR_32_HTABMASK) << 16) | 0xFFFF;
+        env->htab_base = value & SDR_32_HTABORG;
     }
 }
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 5/9] target-ppc: force update of msr bits in cpu_post_load
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (3 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 4/9] target-ppc: move sdr1 value change detection logic to helper_store_sdr1() Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 6/9] openpic: fix segfault on -M mac99 savevm Mark Cave-Ayland
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

Since env->msr has already been restored by the time cpu_post_load is called,
make sure that ppc_store_msr() is explicitly called with all msr bits except
MSR_TGPR marked as invalid.

This solves the issue where MSR flags aren't set correctly when restoring a VM
snapshot, in particular the internal env->excp_prefix value when MSR_EP has
been altered by a guest.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 target-ppc/machine.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/target-ppc/machine.c b/target-ppc/machine.c
index c801b82..3921012 100644
--- a/target-ppc/machine.c
+++ b/target-ppc/machine.c
@@ -159,6 +159,7 @@ static int cpu_post_load(void *opaque, int version_id)
     PowerPCCPU *cpu = opaque;
     CPUPPCState *env = &cpu->env;
     int i;
+    target_ulong msr;
 
     /*
      * We always ignore the source PVR. The user or management
@@ -190,7 +191,12 @@ static int cpu_post_load(void *opaque, int version_id)
         /* Restore htab_base and htab_mask variables */
         ppc_store_sdr1(env, env->spr[SPR_SDR1]);
     }
-    hreg_compute_hflags(env);
+
+    /* Mark msr bits except MSR_TGPR invalid before restoring */
+    msr = env->msr;
+    env->msr ^= ~(1ULL << MSR_TGPR);
+    ppc_store_msr(env, msr);
+
     hreg_compute_mem_idx(env);
 
     return 0;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 6/9] openpic: fix segfault on -M mac99 savevm
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (4 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 5/9] target-ppc: force update of msr bits in cpu_post_load Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 7/9] openpic: fix up loadvm under -M mac99 Mark Cave-Ayland
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

A simple copy/paste error causes savevm on -M mac99 to segfault.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/intc/openpic.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index 7d1f3b9..8699a4a 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -1335,7 +1335,7 @@ static void openpic_save(QEMUFile* f, void *opaque)
     for (i = 0; i < opp->max_irq; i++) {
         qemu_put_be32s(f, &opp->src[i].ivpr);
         qemu_put_be32s(f, &opp->src[i].idr);
-        qemu_get_be32s(f, &opp->src[i].destmask);
+        qemu_put_be32s(f, &opp->src[i].destmask);
         qemu_put_sbe32s(f, &opp->src[i].last_cpu);
         qemu_put_sbe32s(f, &opp->src[i].pending);
     }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 7/9] openpic: fix up loadvm under -M mac99
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (5 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 6/9] openpic: fix segfault on -M mac99 savevm Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 8/9] openpic: switch IRQQueue queue from inline to bitmap Mark Cave-Ayland
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

Issuing loadvm under -M mac99 would fail for two reasons: firstly an incorrect
version number for openpic would cause openpic_load() to abort, and secondly
a cut/paste error when restoring the IVPR and IDR registers caused subsequent
vmstate sections to become misaligned and abort early.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/intc/openpic.c |    8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index 8699a4a..4194cef 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -1366,7 +1366,7 @@ static int openpic_load(QEMUFile* f, void *opaque, int version_id)
     OpenPICState *opp = (OpenPICState *)opaque;
     unsigned int i, nb_cpus;
 
-    if (version_id != 1) {
+    if (version_id != 2) {
         return -EINVAL;
     }
 
@@ -1399,12 +1399,10 @@ static int openpic_load(QEMUFile* f, void *opaque, int version_id)
         uint32_t val;
 
         val = qemu_get_be32(f);
-        write_IRQreg_idr(opp, i, val);
-        val = qemu_get_be32(f);
         write_IRQreg_ivpr(opp, i, val);
+        val = qemu_get_be32(f);
+        write_IRQreg_idr(opp, i, val);
 
-        qemu_get_be32s(f, &opp->src[i].ivpr);
-        qemu_get_be32s(f, &opp->src[i].idr);
         qemu_get_be32s(f, &opp->src[i].destmask);
         qemu_get_sbe32s(f, &opp->src[i].last_cpu);
         qemu_get_sbe32s(f, &opp->src[i].pending);
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 8/9] openpic: switch IRQQueue queue from inline to bitmap
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (6 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 7/9] openpic: fix up loadvm under -M mac99 Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 9/9] openpic: convert to vmstate Mark Cave-Ayland
  2015-02-27 13:09 ` [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

This is in preparation for using VMSTATE_BITMAP in a followup vmstate
migration patch.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/intc/openpic.c |   25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index 4194cef..2a3144f 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -200,11 +200,13 @@ typedef enum IRQType {
     IRQ_TYPE_FSLSPECIAL,    /* FSL timer/IPI interrupt, edge, no polarity */
 } IRQType;
 
+/* Round up to the nearest 64 IRQs so that the queue length
+ * won't change when moving between 32 and 64 bit hosts.
+ */
+#define IRQQUEUE_SIZE_BITS ((OPENPIC_MAX_IRQ + 63) & ~63)
+
 typedef struct IRQQueue {
-    /* Round up to the nearest 64 IRQs so that the queue length
-     * won't change when moving between 32 and 64 bit hosts.
-     */
-    unsigned long queue[BITS_TO_LONGS((OPENPIC_MAX_IRQ + 63) & ~63)];
+    unsigned long *queue;
     int next;
     int priority;
 } IRQQueue;
@@ -1291,7 +1293,7 @@ static void openpic_save_IRQ_queue(QEMUFile* f, IRQQueue *q)
 {
     unsigned int i;
 
-    for (i = 0; i < ARRAY_SIZE(q->queue); i++) {
+    for (i = 0; i < BITS_TO_LONGS(IRQQUEUE_SIZE_BITS); i++) {
         /* Always put the lower half of a 64-bit long first, in case we
          * restore on a 32-bit host.  The least significant bits correspond
          * to lower IRQ numbers in the bitmap.
@@ -1345,7 +1347,7 @@ static void openpic_load_IRQ_queue(QEMUFile* f, IRQQueue *q)
 {
     unsigned int i;
 
-    for (i = 0; i < ARRAY_SIZE(q->queue); i++) {
+    for (i = 0; i < BITS_TO_LONGS(IRQQUEUE_SIZE_BITS); i++) {
         unsigned long val;
 
         val = qemu_get_be32(f);
@@ -1444,12 +1446,14 @@ static void openpic_reset(DeviceState *d)
         write_IRQreg_idr(opp, i, opp->idr_reset);
     }
     /* Initialise IRQ destinations */
-    for (i = 0; i < MAX_CPU; i++) {
+    for (i = 0; i < opp->nb_cpus; i++) {
         opp->dst[i].ctpr      = 15;
-        memset(&opp->dst[i].raised, 0, sizeof(IRQQueue));
         opp->dst[i].raised.next = -1;
-        memset(&opp->dst[i].servicing, 0, sizeof(IRQQueue));
+        opp->dst[i].raised.priority = 0;
+        bitmap_clear(opp->dst[i].raised.queue, 0, IRQQUEUE_SIZE_BITS);
         opp->dst[i].servicing.next = -1;
+        opp->dst[i].servicing.priority = 0;
+        bitmap_clear(opp->dst[i].servicing.queue, 0, IRQQUEUE_SIZE_BITS);
     }
     /* Initialise timers */
     for (i = 0; i < OPENPIC_MAX_TMR; i++) {
@@ -1629,6 +1633,9 @@ static void openpic_realize(DeviceState *dev, Error **errp)
         for (j = 0; j < OPENPIC_OUTPUT_NB; j++) {
             sysbus_init_irq(d, &opp->dst[i].irqs[j]);
         }
+
+        opp->dst[i].raised.queue = bitmap_new(IRQQUEUE_SIZE_BITS);
+        opp->dst[i].servicing.queue = bitmap_new(IRQQUEUE_SIZE_BITS);
     }
 
     register_savevm(dev, "openpic", 0, 2,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCHv3 9/9] openpic: convert to vmstate
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (7 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 8/9] openpic: switch IRQQueue queue from inline to bitmap Mark Cave-Ayland
@ 2015-02-09 22:40 ` Mark Cave-Ayland
  2015-02-27 13:09 ` [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
  9 siblings, 0 replies; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-09 22:40 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Alexander Graf <agraf@suse.de>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
 hw/intc/openpic.c |  253 +++++++++++++++++++++++++----------------------------
 1 file changed, 119 insertions(+), 134 deletions(-)

diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index 2a3144f..25ecd06 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -207,6 +207,7 @@ typedef enum IRQType {
 
 typedef struct IRQQueue {
     unsigned long *queue;
+    int32_t queue_size; /* Only used for VMSTATE_BITMAP */
     int next;
     int priority;
 } IRQQueue;
@@ -242,6 +243,15 @@ typedef struct IRQSource {
 #define IDR_EP      0x80000000  /* external pin */
 #define IDR_CI      0x40000000  /* critical interrupt */
 
+typedef struct OpenPICTimer {
+    uint32_t tccr;  /* Global timer current count register */
+    uint32_t tbcr;  /* Global timer base count register */
+} OpenPICTimer;
+
+typedef struct OpenPICMSI {
+    uint32_t msir;   /* Shared Message Signaled Interrupt Register */
+} OpenPICMSI;
+
 typedef struct IRQDest {
     int32_t ctpr; /* CPU current task priority */
     IRQQueue raised;
@@ -290,14 +300,9 @@ typedef struct OpenPICState {
     IRQDest dst[MAX_CPU];
     uint32_t nb_cpus;
     /* Timer registers */
-    struct {
-        uint32_t tccr;  /* Global timer current count register */
-        uint32_t tbcr;  /* Global timer base count register */
-    } timers[OPENPIC_MAX_TMR];
+    OpenPICTimer timers[OPENPIC_MAX_TMR];
     /* Shared MSI registers */
-    struct {
-        uint32_t msir;   /* Shared Message Signaled Interrupt Register */
-    } msi[MAX_MSI];
+    OpenPICMSI msi[MAX_MSI];
     uint32_t max_irq;
     uint32_t irq_ipi0;
     uint32_t irq_tim0;
@@ -1289,130 +1294,6 @@ static const MemoryRegionOps openpic_summary_ops_be = {
     },
 };
 
-static void openpic_save_IRQ_queue(QEMUFile* f, IRQQueue *q)
-{
-    unsigned int i;
-
-    for (i = 0; i < BITS_TO_LONGS(IRQQUEUE_SIZE_BITS); i++) {
-        /* Always put the lower half of a 64-bit long first, in case we
-         * restore on a 32-bit host.  The least significant bits correspond
-         * to lower IRQ numbers in the bitmap.
-         */
-        qemu_put_be32(f, (uint32_t)q->queue[i]);
-#if LONG_MAX > 0x7FFFFFFF
-        qemu_put_be32(f, (uint32_t)(q->queue[i] >> 32));
-#endif
-    }
-
-    qemu_put_sbe32s(f, &q->next);
-    qemu_put_sbe32s(f, &q->priority);
-}
-
-static void openpic_save(QEMUFile* f, void *opaque)
-{
-    OpenPICState *opp = (OpenPICState *)opaque;
-    unsigned int i;
-
-    qemu_put_be32s(f, &opp->gcr);
-    qemu_put_be32s(f, &opp->vir);
-    qemu_put_be32s(f, &opp->pir);
-    qemu_put_be32s(f, &opp->spve);
-    qemu_put_be32s(f, &opp->tfrr);
-
-    qemu_put_be32s(f, &opp->nb_cpus);
-
-    for (i = 0; i < opp->nb_cpus; i++) {
-        qemu_put_sbe32s(f, &opp->dst[i].ctpr);
-        openpic_save_IRQ_queue(f, &opp->dst[i].raised);
-        openpic_save_IRQ_queue(f, &opp->dst[i].servicing);
-        qemu_put_buffer(f, (uint8_t *)&opp->dst[i].outputs_active,
-                        sizeof(opp->dst[i].outputs_active));
-    }
-
-    for (i = 0; i < OPENPIC_MAX_TMR; i++) {
-        qemu_put_be32s(f, &opp->timers[i].tccr);
-        qemu_put_be32s(f, &opp->timers[i].tbcr);
-    }
-
-    for (i = 0; i < opp->max_irq; i++) {
-        qemu_put_be32s(f, &opp->src[i].ivpr);
-        qemu_put_be32s(f, &opp->src[i].idr);
-        qemu_put_be32s(f, &opp->src[i].destmask);
-        qemu_put_sbe32s(f, &opp->src[i].last_cpu);
-        qemu_put_sbe32s(f, &opp->src[i].pending);
-    }
-}
-
-static void openpic_load_IRQ_queue(QEMUFile* f, IRQQueue *q)
-{
-    unsigned int i;
-
-    for (i = 0; i < BITS_TO_LONGS(IRQQUEUE_SIZE_BITS); i++) {
-        unsigned long val;
-
-        val = qemu_get_be32(f);
-#if LONG_MAX > 0x7FFFFFFF
-        val <<= 32;
-        val |= qemu_get_be32(f);
-#endif
-
-        q->queue[i] = val;
-    }
-
-    qemu_get_sbe32s(f, &q->next);
-    qemu_get_sbe32s(f, &q->priority);
-}
-
-static int openpic_load(QEMUFile* f, void *opaque, int version_id)
-{
-    OpenPICState *opp = (OpenPICState *)opaque;
-    unsigned int i, nb_cpus;
-
-    if (version_id != 2) {
-        return -EINVAL;
-    }
-
-    qemu_get_be32s(f, &opp->gcr);
-    qemu_get_be32s(f, &opp->vir);
-    qemu_get_be32s(f, &opp->pir);
-    qemu_get_be32s(f, &opp->spve);
-    qemu_get_be32s(f, &opp->tfrr);
-
-    qemu_get_be32s(f, &nb_cpus);
-    if (opp->nb_cpus != nb_cpus) {
-        return -EINVAL;
-    }
-    assert(nb_cpus > 0 && nb_cpus <= MAX_CPU);
-
-    for (i = 0; i < opp->nb_cpus; i++) {
-        qemu_get_sbe32s(f, &opp->dst[i].ctpr);
-        openpic_load_IRQ_queue(f, &opp->dst[i].raised);
-        openpic_load_IRQ_queue(f, &opp->dst[i].servicing);
-        qemu_get_buffer(f, (uint8_t *)&opp->dst[i].outputs_active,
-                        sizeof(opp->dst[i].outputs_active));
-    }
-
-    for (i = 0; i < OPENPIC_MAX_TMR; i++) {
-        qemu_get_be32s(f, &opp->timers[i].tccr);
-        qemu_get_be32s(f, &opp->timers[i].tbcr);
-    }
-
-    for (i = 0; i < opp->max_irq; i++) {
-        uint32_t val;
-
-        val = qemu_get_be32(f);
-        write_IRQreg_ivpr(opp, i, val);
-        val = qemu_get_be32(f);
-        write_IRQreg_idr(opp, i, val);
-
-        qemu_get_be32s(f, &opp->src[i].destmask);
-        qemu_get_sbe32s(f, &opp->src[i].last_cpu);
-        qemu_get_sbe32s(f, &opp->src[i].pending);
-    }
-
-    return 0;
-}
-
 static void openpic_reset(DeviceState *d)
 {
     OpenPICState *opp = OPENPIC(d);
@@ -1527,6 +1408,110 @@ static void map_list(OpenPICState *opp, const MemReg *list, int *count)
     }
 }
 
+static const VMStateDescription vmstate_openpic_irq_queue = {
+    .name = "openpic_irq_queue",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_BITMAP(queue, IRQQueue, 0, queue_size),
+        VMSTATE_INT32(next, IRQQueue),
+        VMSTATE_INT32(priority, IRQQueue),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_openpic_irqdest = {
+    .name = "openpic_irqdest",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_INT32(ctpr, IRQDest),
+        VMSTATE_STRUCT(raised, IRQDest, 0, vmstate_openpic_irq_queue,
+                       IRQQueue),
+        VMSTATE_STRUCT(servicing, IRQDest, 0, vmstate_openpic_irq_queue,
+                       IRQQueue),
+        VMSTATE_UINT32_ARRAY(outputs_active, IRQDest, OPENPIC_OUTPUT_NB),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_openpic_irqsource = {
+    .name = "openpic_irqsource",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT32(ivpr, IRQSource),
+        VMSTATE_UINT32(idr, IRQSource),
+        VMSTATE_UINT32(destmask, IRQSource),
+        VMSTATE_INT32(last_cpu, IRQSource),
+        VMSTATE_INT32(pending, IRQSource),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_openpic_timer = {
+    .name = "openpic_timer",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT32(tccr, OpenPICTimer),
+        VMSTATE_UINT32(tbcr, OpenPICTimer),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_openpic_msi = {
+    .name = "openpic_msi",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT32(msir, OpenPICMSI),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static int openpic_post_load(void *opaque, int version_id)
+{
+    OpenPICState *opp = (OpenPICState *)opaque;
+    int i;
+
+    /* Update internal ivpr and idr variables */
+    for (i = 0; i < opp->max_irq; i++) {
+        write_IRQreg_idr(opp, i, opp->src[i].idr);
+        write_IRQreg_ivpr(opp, i, opp->src[i].ivpr);
+    }
+
+    return 0;
+}
+
+static const VMStateDescription vmstate_openpic = {
+    .name = "openpic",
+    .version_id = 3,
+    .minimum_version_id = 3,
+    .post_load = openpic_post_load,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT32(gcr, OpenPICState),
+        VMSTATE_UINT32(vir, OpenPICState),
+        VMSTATE_UINT32(pir, OpenPICState),
+        VMSTATE_UINT32(spve, OpenPICState),
+        VMSTATE_UINT32(tfrr, OpenPICState),
+        VMSTATE_UINT32(max_irq, OpenPICState),
+        VMSTATE_STRUCT_VARRAY_UINT32(src, OpenPICState, max_irq, 0,
+                                     vmstate_openpic_irqsource, IRQSource),
+        VMSTATE_UINT32_EQUAL(nb_cpus, OpenPICState),
+        VMSTATE_STRUCT_VARRAY_UINT32(dst, OpenPICState, nb_cpus, 0,
+                                     vmstate_openpic_irqdest, IRQDest),
+        VMSTATE_STRUCT_ARRAY(timers, OpenPICState, OPENPIC_MAX_TMR, 0,
+                             vmstate_openpic_timer, OpenPICTimer),
+        VMSTATE_STRUCT_ARRAY(msi, OpenPICState, MAX_MSI, 0,
+                             vmstate_openpic_msi, OpenPICMSI),
+        VMSTATE_UINT32(irq_ipi0, OpenPICState),
+        VMSTATE_UINT32(irq_tim0, OpenPICState),
+        VMSTATE_UINT32(irq_msi, OpenPICState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void openpic_init(Object *obj)
 {
     OpenPICState *opp = OPENPIC(obj);
@@ -1634,13 +1619,12 @@ static void openpic_realize(DeviceState *dev, Error **errp)
             sysbus_init_irq(d, &opp->dst[i].irqs[j]);
         }
 
+        opp->dst[i].raised.queue_size = IRQQUEUE_SIZE_BITS;
         opp->dst[i].raised.queue = bitmap_new(IRQQUEUE_SIZE_BITS);
+        opp->dst[i].servicing.queue_size = IRQQUEUE_SIZE_BITS;
         opp->dst[i].servicing.queue = bitmap_new(IRQQUEUE_SIZE_BITS);
     }
 
-    register_savevm(dev, "openpic", 0, 2,
-                    openpic_save, openpic_load, opp);
-
     sysbus_init_mmio(d, &opp->mem);
     qdev_init_gpio_in(dev, openpic_set_irq, opp->max_irq);
 }
@@ -1658,6 +1642,7 @@ static void openpic_class_init(ObjectClass *oc, void *data)
     dc->realize = openpic_realize;
     dc->props = openpic_properties;
     dc->reset = openpic_reset;
+    dc->vmsd = &vmstate_openpic;
 }
 
 static const TypeInfo openpic_info = {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99
  2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
                   ` (8 preceding siblings ...)
  2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 9/9] openpic: convert to vmstate Mark Cave-Ayland
@ 2015-02-27 13:09 ` Mark Cave-Ayland
  2015-02-27 14:44   ` Alexander Graf
  9 siblings, 1 reply; 12+ messages in thread
From: Mark Cave-Ayland @ 2015-02-27 13:09 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, agraf

On 09/02/15 22:40, Mark Cave-Ayland wrote:

> This patchset fixes up various bugs in loadvm/savevm for -M g3beige and
> -M mac99 so that it is becomes possible to save and restore image snapshots.
> 
> The focus of this patchset is on -M g3beige since this matches the majority
> of my test images, but there were some easy fixes to be made to -M mac99
> at the same time.
> 
> With this patchset applied both -M g3beige and -M mac99 images can be
> saved/restored whilst booted into OpenBIOS with no issues. I tested -M g3beige
> with a paused, disk-inactive Darwin 6 image and was able to resume
> successfully which was good enough for my needs.
> 
> I noticed some hangs can still occur when trying to restore an image
> where the disk is active which makes me believe that there is still some
> extra macio/dbdma state which needs to be included if someone is interested
> enough to pursue this further.
> 
> Most of the patches are straightforward except for patch 4 which came out of
> a discussion on-list between Alex and Paolo, and patch 5 which is a similar
> error except this time for the MSR register.

Ping? Just saw the other openpic patches go through the list and was
wondering if this patchset needed any further work?


ATB,

Mark.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99
  2015-02-27 13:09 ` [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
@ 2015-02-27 14:44   ` Alexander Graf
  0 siblings, 0 replies; 12+ messages in thread
From: Alexander Graf @ 2015-02-27 14:44 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel, qemu-ppc



On 27.02.15 14:09, Mark Cave-Ayland wrote:
> On 09/02/15 22:40, Mark Cave-Ayland wrote:
> 
>> This patchset fixes up various bugs in loadvm/savevm for -M g3beige and
>> -M mac99 so that it is becomes possible to save and restore image snapshots.
>>
>> The focus of this patchset is on -M g3beige since this matches the majority
>> of my test images, but there were some easy fixes to be made to -M mac99
>> at the same time.
>>
>> With this patchset applied both -M g3beige and -M mac99 images can be
>> saved/restored whilst booted into OpenBIOS with no issues. I tested -M g3beige
>> with a paused, disk-inactive Darwin 6 image and was able to resume
>> successfully which was good enough for my needs.
>>
>> I noticed some hangs can still occur when trying to restore an image
>> where the disk is active which makes me believe that there is still some
>> extra macio/dbdma state which needs to be included if someone is interested
>> enough to pursue this further.
>>
>> Most of the patches are straightforward except for patch 4 which came out of
>> a discussion on-list between Alex and Paolo, and patch 5 which is a similar
>> error except this time for the MSR register.
> 
> Ping? Just saw the other openpic patches go through the list and was
> wondering if this patchset needed any further work?

Sorry, LIFO for patch / mail queues probably just isn't the best way to
handle them ;).

Applied to ppc-next now, thanks a lot for your work!


Alex

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-02-27 14:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-09 22:40 [Qemu-devel] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 1/9] macio.c: include parent PCIDevice state in VMStateDescription Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 2/9] adb.c: include ADBDevice parent state in KBDState and MouseState Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 3/9] cuda.c: include adb_poll_timer in VMStateDescription Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 4/9] target-ppc: move sdr1 value change detection logic to helper_store_sdr1() Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 5/9] target-ppc: force update of msr bits in cpu_post_load Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 6/9] openpic: fix segfault on -M mac99 savevm Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 7/9] openpic: fix up loadvm under -M mac99 Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 8/9] openpic: switch IRQQueue queue from inline to bitmap Mark Cave-Ayland
2015-02-09 22:40 ` [Qemu-devel] [PATCHv3 9/9] openpic: convert to vmstate Mark Cave-Ayland
2015-02-27 13:09 ` [Qemu-devel] [Qemu-ppc] [PATCHv3 0/9] ppc: loadvm/savevm fixups for -M g3beige and -M mac99 Mark Cave-Ayland
2015-02-27 14:44   ` Alexander Graf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.