qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org
Cc: quintela@redhat.com, yury-kotov@yandex-team.ru,
	richardw.yang@linux.intel.com, marcandre.lureau@redhat.com,
	ivanren@tencent.com
Subject: [Qemu-devel] [PULL 02/33] hw/net: fix vmxnet3 live migration
Date: Thu, 15 Aug 2019 17:34:33 +0100	[thread overview]
Message-ID: <20190815163504.18937-3-dgilbert@redhat.com> (raw)
In-Reply-To: <20190815163504.18937-1-dgilbert@redhat.com>

From: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>

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 <marcel.apfelbaum@gmail.com>
Message-Id: <20190705010711.23277-1-marcel.apfelbaum@gmail.com>
Tested-by: Sukrit Bhatnagar <skrtbhtngr@gmail.com>
Reviewed-by: Dmitry Fleytman <dmitry.fleytman@gmail.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 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



  parent reply	other threads:[~2019-08-15 16:36 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-15 16:34 [Qemu-devel] [PULL 00/33] migration queue Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 01/33] migration: Add error_desc for file channel errors Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` Dr. David Alan Gilbert (git) [this message]
2019-08-15 16:34 ` [Qemu-devel] [PULL 03/33] migration: consolidate time info into populate_time_info Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 04/33] migration/postcopy: the valid condition is one less then end Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [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 16:34 ` [Qemu-devel] [PULL 06/33] migration/postcopy: discard_length must not be 0 Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 07/33] migration/postcopy: reduce one operation to calculate fixup_start_addr Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [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 16:34 ` [Qemu-devel] [PULL 09/33] migration/savevm: flush file for iterable_only case Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 10/33] migration/savevm: split qemu_savevm_state_complete_precopy() into two parts Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 11/33] migration/savevm: move non SaveStateEntry condition check out of iteration Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 12/33] migration/postcopy: PostcopyState is already set in loadvm_postcopy_handle_advise() Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 13/33] migration/postcopy: start_postcopy could be true only when migrate_postcopy() return true Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 14/33] migration: use migration_in_postcopy() to check POSTCOPY_ACTIVE Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 15/33] migration: just pass RAMBlock is enough Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 16/33] migration: equation is more proper than and to check LOADVM_QUIT Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 17/33] migration: return -EINVAL directly when version_id mismatch Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 18/33] migration: extract ram_load_precopy Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 19/33] migration/postcopy: make PostcopyDiscardState a static variable Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 20/33] migration/postcopy: simplify calculation of run_start and fixup_start_addr Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 21/33] migration/postcopy: use QEMU_IS_ALIGNED to replace host_offset Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 22/33] hmp: Remove migration capabilities from "info migrate" Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 23/33] migration: remove unused field bytes_xfer Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 24/33] migration: always initialise ram_counters for a new migration Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 25/33] migration: add qemu_file_update_transfer interface Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 26/33] migration: add speed limit for multifd migration Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 27/33] migration: update ram_counters for multifd sync packet Dr. David Alan Gilbert (git)
2019-08-15 16:34 ` [Qemu-devel] [PULL 28/33] migration: rename migration_bitmap_sync_range to ramblock_sync_dirty_bitmap Dr. David Alan Gilbert (git)
2019-08-15 16:35 ` [Qemu-devel] [PULL 29/33] migration/postcopy: use mis->bh instead of allocating a QEMUBH Dr. David Alan Gilbert (git)
2019-08-15 16:35 ` [Qemu-devel] [PULL 30/33] qemu-file: move qemu_{get, put}_counted_string() declarations Dr. David Alan Gilbert (git)
2019-08-15 16:35 ` [Qemu-devel] [PULL 31/33] migration: Add traces for multifd terminate threads Dr. David Alan Gilbert (git)
2019-08-15 16:35 ` [Qemu-devel] [PULL 32/33] migration: Make global sem_sync semaphore by channel Dr. David Alan Gilbert (git)
2019-08-15 16:35 ` [Qemu-devel] [PULL 33/33] migration: add some multifd traces Dr. David Alan Gilbert (git)
2019-08-16 12:58 ` [Qemu-devel] [PULL 00/33] migration queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190815163504.18937-3-dgilbert@redhat.com \
    --to=dgilbert@redhat.com \
    --cc=ivanren@tencent.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=richardw.yang@linux.intel.com \
    --cc=yury-kotov@yandex-team.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).