[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [qemu-xen master] spapr: Fix migration of PCI host bridges from qemu-2.7



commit 9b54ca0ba781012eeea4237b7c4832ba2ea81d89
Author:     David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
AuthorDate: Tue Nov 15 10:08:42 2016 +1100
Commit:     David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
CommitDate: Tue Nov 15 10:08:42 2016 +1100

    spapr: Fix migration of PCI host bridges from qemu-2.7
    
    daa2369 "spapr_pci: Add a 64-bit MMIO window" subtly broke migration from
    qemu-2.7 to the current version.  It split the device's MMIO window into
    two pieces for 32-bit and 64-bit MMIO.
    
    The patch included backwards compatibility code to convert the old property
    into the new format.  However, the property value was also transferred in
    the migration stream and compared with a (probably unwise) VMSTATE_EQUAL.
    So, the "raw" value from 2.7 is compared to the new style converted value
    from (pre-)2.8 giving a mismatch and migration failure.
    
    Although it would be technically possible to fix this in a way allowing
    backwards migration, that would leave an ugly legacy around indefinitely.
    This patch takes the simpler approach of bumping the migration version,
    dropping the unwise VMSTATE_EQUAL (and some equally unwise ones around it)
    and ignoring them on an incoming migration.
    
    Signed-off-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
    Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxxxx>
---
 hw/ppc/spapr_pci.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 7cde30e..f9661b7 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -1658,19 +1658,25 @@ static int spapr_pci_post_load(void *opaque, int 
version_id)
     return 0;
 }
 
+static bool version_before_3(void *opaque, int version_id)
+{
+    return version_id < 3;
+}
+
 static const VMStateDescription vmstate_spapr_pci = {
     .name = "spapr_pci",
-    .version_id = 2,
+    .version_id = 3,
     .minimum_version_id = 2,
     .pre_save = spapr_pci_pre_save,
     .post_load = spapr_pci_post_load,
     .fields = (VMStateField[]) {
         VMSTATE_UINT64_EQUAL(buid, sPAPRPHBState),
-        VMSTATE_UINT32_EQUAL(dma_liobn[0], sPAPRPHBState),
-        VMSTATE_UINT64_EQUAL(mem_win_addr, sPAPRPHBState),
-        VMSTATE_UINT64_EQUAL(mem_win_size, sPAPRPHBState),
-        VMSTATE_UINT64_EQUAL(io_win_addr, sPAPRPHBState),
-        VMSTATE_UINT64_EQUAL(io_win_size, sPAPRPHBState),
+        VMSTATE_UNUSED_TEST(version_before_3,
+                            sizeof(uint32_t) /* dma_liobn[0] */
+                            + sizeof(uint64_t) /* mem_win_addr */
+                            + sizeof(uint64_t) /* mem_win_size */
+                            + sizeof(uint64_t) /* io_win_addr */
+                            + sizeof(uint64_t) /* io_win_size */),
         VMSTATE_STRUCT_ARRAY(lsi_table, sPAPRPHBState, PCI_NUM_PINS, 0,
                              vmstate_spapr_pci_lsi, struct spapr_pci_lsi),
         VMSTATE_INT32(msi_devs_num, sPAPRPHBState),
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.