[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/33] hw/net: fix vmxnet3 live migration
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PULL 02/33] hw/net: fix vmxnet3 live migration |
Date: |
Thu, 15 Aug 2019 17:34:33 +0100 |
From: Marcel Apfelbaum <address@hidden>
At some point vmxnet3 live migration stopped working and git-bisect
didn't help finding a working version.
The issue is the PCI configuration space is not being migrated
successfully and MSIX remains masked at destination.
Remove the migration differentiation between PCI and PCIe since
the logic resides now inside VMSTATE_PCI_DEVICE.
Remove also the VMXNET3_COMPAT_FLAG_DISABLE_PCIE based differentiation
since at 'realize' time is decided if the device is PCI or PCIe,
then the above macro is enough.
Use the opportunity to move to the standard VMSTATE_MSIX
instead of the deprecated SaveVMHandlers.
Signed-off-by: Marcel Apfelbaum <address@hidden>
Message-Id: <address@hidden>
Tested-by: Sukrit Bhatnagar <address@hidden>
Reviewed-by: Dmitry Fleytman <address@hidden>
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
hw/net/vmxnet3.c | 52 ++----------------------------------------------
1 file changed, 2 insertions(+), 50 deletions(-)
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 10d01d0058..8b17548b02 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2141,21 +2141,6 @@ vmxnet3_cleanup_msi(VMXNET3State *s)
msi_uninit(d);
}
-static void
-vmxnet3_msix_save(QEMUFile *f, void *opaque)
-{
- PCIDevice *d = PCI_DEVICE(opaque);
- msix_save(d, f);
-}
-
-static int
-vmxnet3_msix_load(QEMUFile *f, void *opaque, int version_id)
-{
- PCIDevice *d = PCI_DEVICE(opaque);
- msix_load(d, f);
- return 0;
-}
-
static const MemoryRegionOps b0_ops = {
.read = vmxnet3_io_bar0_read,
.write = vmxnet3_io_bar0_write,
@@ -2176,11 +2161,6 @@ static const MemoryRegionOps b1_ops = {
},
};
-static SaveVMHandlers savevm_vmxnet3_msix = {
- .save_state = vmxnet3_msix_save,
- .load_state = vmxnet3_msix_load,
-};
-
static uint64_t vmxnet3_device_serial_num(VMXNET3State *s)
{
uint64_t dsn_payload;
@@ -2203,7 +2183,6 @@ static uint64_t vmxnet3_device_serial_num(VMXNET3State *s)
static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
{
- DeviceState *dev = DEVICE(pci_dev);
VMXNET3State *s = VMXNET3(pci_dev);
int ret;
@@ -2249,8 +2228,6 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error
**errp)
pcie_dev_ser_num_init(pci_dev, VMXNET3_DSN_OFFSET,
vmxnet3_device_serial_num(s));
}
-
- register_savevm_live(dev, "vmxnet3-msix", -1, 1, &savevm_vmxnet3_msix, s);
}
static void vmxnet3_instance_init(Object *obj)
@@ -2440,29 +2417,6 @@ static const VMStateDescription
vmstate_vmxnet3_int_state = {
}
};
-static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
-{
- VMXNET3State *s = VMXNET3(opaque);
-
- return !(s->compat_flags & VMXNET3_COMPAT_FLAG_DISABLE_PCIE);
-}
-
-static bool vmxnet3_vmstate_test_pci_device(void *opaque, int version_id)
-{
- return !vmxnet3_vmstate_need_pcie_device(opaque);
-}
-
-static const VMStateDescription vmstate_vmxnet3_pcie_device = {
- .name = "vmxnet3/pcie",
- .version_id = 1,
- .minimum_version_id = 1,
- .needed = vmxnet3_vmstate_need_pcie_device,
- .fields = (VMStateField[]) {
- VMSTATE_PCI_DEVICE(parent_obj, VMXNET3State),
- VMSTATE_END_OF_LIST()
- }
-};
-
static const VMStateDescription vmstate_vmxnet3 = {
.name = "vmxnet3",
.version_id = 1,
@@ -2470,9 +2424,8 @@ static const VMStateDescription vmstate_vmxnet3 = {
.pre_save = vmxnet3_pre_save,
.post_load = vmxnet3_post_load,
.fields = (VMStateField[]) {
- VMSTATE_STRUCT_TEST(parent_obj, VMXNET3State,
- vmxnet3_vmstate_test_pci_device, 0,
- vmstate_pci_device, PCIDevice),
+ VMSTATE_PCI_DEVICE(parent_obj, VMXNET3State),
+ VMSTATE_MSIX(parent_obj, VMXNET3State),
VMSTATE_BOOL(rx_packets_compound, VMXNET3State),
VMSTATE_BOOL(rx_vlan_stripping, VMXNET3State),
VMSTATE_BOOL(lro_supported, VMXNET3State),
@@ -2508,7 +2461,6 @@ static const VMStateDescription vmstate_vmxnet3 = {
},
.subsections = (const VMStateDescription*[]) {
&vmxstate_vmxnet3_mcast_list,
- &vmstate_vmxnet3_pcie_device,
NULL
}
};
--
2.21.0
- [Qemu-devel] [PULL 00/33] migration queue, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 01/33] migration: Add error_desc for file channel errors, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 02/33] hw/net: fix vmxnet3 live migration,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [PULL 03/33] migration: consolidate time info into populate_time_info, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 05/33] migration/postcopy: break the loop when there is no more page to discard, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 04/33] migration/postcopy: the valid condition is one less then end, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 06/33] migration/postcopy: discard_length must not be 0, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 07/33] migration/postcopy: reduce one operation to calculate fixup_start_addr, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 08/33] migration/postcopy: do_fixup is true when host_offset is non-zero, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 09/33] migration/savevm: flush file for iterable_only case, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 10/33] migration/savevm: split qemu_savevm_state_complete_precopy() into two parts, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 11/33] migration/savevm: move non SaveStateEntry condition check out of iteration, Dr. David Alan Gilbert (git), 2019/08/15
- [Qemu-devel] [PULL 12/33] migration/postcopy: PostcopyState is already set in loadvm_postcopy_handle_advise(), Dr. David Alan Gilbert (git), 2019/08/15