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

[Xen-changelog] [qemu-xen master] virtio-pci: Fix cross-version migration with older machines



commit 66d1c4c19faff83e36075c7b61053d060a8ffc50
Author:     Maxime Coquelin <maxime.coquelin@xxxxxxxxxx>
AuthorDate: Wed Dec 14 17:30:35 2016 +0100
Commit:     Stefan Hajnoczi <stefanha@xxxxxxxxxx>
CommitDate: Thu Dec 15 07:35:19 2016 +0000

    virtio-pci: Fix cross-version migration with older machines
    
    This patch fixes a cross-version migration regression introduced
    by commit d1b4259f ("virtio-bus: Plug devices after features are
    negotiated").
    
    The problem is encountered when host's vhost backend does not support
    VIRTIO_F_VERSION_1, and migration is initiated from a v2.7 or prior
    machine with virtio-pci modern capabilities enabled to a v2.8 machine.
    
    In this case, modern capabilities get exposed to the guest by the source,
    whereas the target will detect version 1 is not supported so will only
    expose legacy capabilities.
    
    The problem is fixed by introducing a new "x-ignore-backend-features"
    property, which is set in v2.7 and prior compatibility modes. Doing this,
    v2.7 machine keeps its broken behaviour (enabling modern while version
    is not supported), and newer machines will behave correctly.
    
    Reported-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
    Reviewed-by: Marcel Apfelbaum <marcel@xxxxxxxxxx>
    Reviewed-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
    Reviewed-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Tested-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Maxime Coquelin <maxime.coquelin@xxxxxxxxxx>
    Message-id: 20161214163035.3297-1-maxime.coquelin@xxxxxxxxxx
    Suggested-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
    Cc: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Cc: Cornelia Huck <cornelia.huck@xxxxxxxxxx>
    Cc: Dr. David Alan Gilbert <dgilbert@xxxxxxxxxx>
    Reviewed-by: Marcel Apfelbaum <marcel@xxxxxxxxxx>
    Reviewed-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
    Tested-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Maxime Coquelin <maxime.coquelin@xxxxxxxxxx>
    Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
---
 hw/virtio/virtio-pci.c | 5 ++++-
 hw/virtio/virtio-pci.h | 1 +
 include/hw/compat.h    | 4 ++++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 521ba0b..21c2b9d 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1580,7 +1580,8 @@ static void virtio_pci_device_plugged(DeviceState *d, 
Error **errp)
      * Virtio capabilities present without
      * VIRTIO_F_VERSION_1 confuses guests
      */
-    if (!virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
+    if (!proxy->ignore_backend_features &&
+            !virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
         virtio_pci_disable_modern(proxy);
 
         if (!legacy) {
@@ -1852,6 +1853,8 @@ static Property virtio_pci_properties[] = {
                     VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT, false),
     DEFINE_PROP_BIT("page-per-vq", VirtIOPCIProxy, flags,
                     VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT, false),
+    DEFINE_PROP_BOOL("x-ignore-backend-features", VirtIOPCIProxy,
+                     ignore_backend_features, false),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h
index b2a996f..5e07886 100644
--- a/hw/virtio/virtio-pci.h
+++ b/hw/virtio/virtio-pci.h
@@ -153,6 +153,7 @@ struct VirtIOPCIProxy {
     int config_cap;
     uint32_t flags;
     bool disable_modern;
+    bool ignore_backend_features;
     OnOffAuto disable_legacy;
     uint32_t class_code;
     uint32_t nvectors;
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 0f06e11..8dfc7a3 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -18,6 +18,10 @@
         .driver   = "intel-iommu",\
         .property = "x-buggy-eim",\
         .value    = "true",\
+    },{\
+        .driver   = "virtio-pci",\
+        .property = "x-ignore-backend-features",\
+        .value    = "on",\
     },
 
 #define HW_COMPAT_2_6 \
--
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®.