qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Thomas Huth <thuth@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	qemu-stable@nongnu.org,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	qemu-s390x@nongnu.org, Richard Henderson <rth@twiddle.net>,
	Stefano Garzarella <sgarzare@redhat.com>
Subject: [PULL v4 16/48] virtio: skip legacy support check on machine types less than 5.1
Date: Tue, 29 Sep 2020 03:21:34 -0400	[thread overview]
Message-ID: <20200929071948.281157-17-mst@redhat.com> (raw)
In-Reply-To: <20200929071948.281157-1-mst@redhat.com>

From: Stefano Garzarella <sgarzare@redhat.com>

Commit 9b3a35ec82 ("virtio: verify that legacy support is not accidentally
on") added a check that returns an error if legacy support is on, but the
device does not support legacy.

Unfortunately some devices were wrongly declared legacy capable even if
they were not (e.g vhost-vsock).

To avoid migration issues, we add a virtio-device property
(x-disable-legacy-check) to skip the legacy error, printing a warning
instead, for machine types < 5.1.

Cc: qemu-stable@nongnu.org
Fixes: 9b3a35ec82 ("virtio: verify that legacy support is not accidentally on")
Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Suggested-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20200921122506.82515-2-sgarzare@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio.h |  2 ++
 hw/core/machine.c          |  1 +
 hw/s390x/virtio-ccw.c      | 15 ++++++++++++---
 hw/virtio/virtio-pci.c     | 14 ++++++++++++--
 hw/virtio/virtio.c         |  7 +++++++
 5 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 28cf3b9120..b7ece7a6a8 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -101,6 +101,7 @@ struct VirtIODevice
     bool use_started;
     bool started;
     bool start_on_kick; /* when virtio 1.0 feature has not been negotiated */
+    bool disable_legacy_check;
     VMChangeStateEntry *vmstate;
     char *bus_name;
     uint8_t device_endian;
@@ -394,5 +395,6 @@ static inline bool virtio_device_disabled(VirtIODevice *vdev)
 }
 
 bool virtio_legacy_allowed(VirtIODevice *vdev);
+bool virtio_legacy_check_disabled(VirtIODevice *vdev);
 
 #endif
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 9b02fb2f5e..d7f4a0d259 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -44,6 +44,7 @@ GlobalProperty hw_compat_5_0[] = {
     { "vmport", "x-signal-unsupported-cmd", "off" },
     { "vmport", "x-report-vmx-type", "off" },
     { "vmport", "x-cmds-v2", "off" },
+    { "virtio-device", "x-disable-legacy-check", "true" },
 };
 const size_t hw_compat_5_0_len = G_N_ELEMENTS(hw_compat_5_0);
 
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 8d140dc50f..4582e94ae7 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -1122,9 +1122,18 @@ static void virtio_ccw_device_plugged(DeviceState *d, Error **errp)
     }
 
     if (!virtio_ccw_rev_max(dev) && !virtio_legacy_allowed(vdev)) {
-        error_setg(errp, "Invalid value of property max_rev "
-                   "(is %d expected >= 1)", virtio_ccw_rev_max(dev));
-        return;
+        /*
+         * To avoid migration issues, we allow legacy mode when legacy
+         * check is disabled in the old machine types (< 5.1).
+         */
+        if (virtio_legacy_check_disabled(vdev)) {
+            warn_report("device requires revision >= 1, but for backward "
+                        "compatibility max_revision=0 is allowed");
+        } else {
+            error_setg(errp, "Invalid value of property max_rev "
+                       "(is %d expected >= 1)", virtio_ccw_rev_max(dev));
+            return;
+        }
     }
 
     if (virtio_get_num_queues(vdev) > VIRTIO_QUEUE_MAX) {
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 02790e3237..36524a5728 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1597,8 +1597,18 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
 
     if (legacy) {
         if (!virtio_legacy_allowed(vdev)) {
-            error_setg(errp, "device is modern-only, use disable-legacy=on");
-            return;
+            /*
+             * To avoid migration issues, we allow legacy mode when legacy
+             * check is disabled in the old machine types (< 5.1).
+             */
+            if (virtio_legacy_check_disabled(vdev)) {
+                warn_report("device is modern-only, but for backward "
+                            "compatibility legacy is allowed");
+            } else {
+                error_setg(errp,
+                           "device is modern-only, use disable-legacy=on");
+                return;
+            }
         }
         if (virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM)) {
             error_setg(errp, "VIRTIO_F_IOMMU_PLATFORM was supported by"
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 3a3d012d9f..a2edb4f386 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -3304,6 +3304,11 @@ bool virtio_legacy_allowed(VirtIODevice *vdev)
     }
 }
 
+bool virtio_legacy_check_disabled(VirtIODevice *vdev)
+{
+    return vdev->disable_legacy_check;
+}
+
 hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n)
 {
     return vdev->vq[n].vring.desc;
@@ -3713,6 +3718,8 @@ static Property virtio_properties[] = {
     DEFINE_VIRTIO_COMMON_FEATURES(VirtIODevice, host_features),
     DEFINE_PROP_BOOL("use-started", VirtIODevice, use_started, true),
     DEFINE_PROP_BOOL("use-disabled-flag", VirtIODevice, use_disabled_flag, true),
+    DEFINE_PROP_BOOL("x-disable-legacy-check", VirtIODevice,
+                     disable_legacy_check, false),
     DEFINE_PROP_END_OF_LIST(),
 };
 
-- 
MST



  parent reply	other threads:[~2020-09-29  7:37 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-29  7:20 [PULL v4 00/48] virtio,pc,acpi: fixes, tests Michael S. Tsirkin
2020-09-29  7:20 ` [PULL v4 01/48] linux headers: sync to 5.9-rc4 Michael S. Tsirkin
2020-09-29  7:20 ` [PULL v4 03/48] vhost-vdpa: batch updating IOTLB mappings Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 04/48] virtio-mem: detach the element from the virtqueue when error occurs Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 05/48] pc: fix auto_enable_numa_with_memhp/auto_enable_numa_with_memdev for the 5.0 machine Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 06/48] vhost: recheck dev state in the vhost_migration_log routine Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 07/48] vhost: check queue state in the vhost_dev_set_log routine Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 08/48] tests/qtest/vhost-user-test: prepare the tests for adding new dev class Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 09/48] cphp: remove deprecated cpu-add command(s) Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 10/48] virtio-iommu: Check gtrees are non null before destroying them Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 11/48] virtio-iommu-pci: force virtio version 1 Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 12/48] virtio-pmem-pci: " Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 13/48] util/hexdump: introduce qemu_hexdump_line() Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 14/48] vhost-vdpa: add trace-events Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 15/48] configure: Fix build dependencies with vhost-vdpa Michael S. Tsirkin
2020-09-29  7:21 ` Michael S. Tsirkin [this message]
2020-09-29  7:21 ` [PULL v4 17/48] vhost-vsock-pci: force virtio version 1 Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 18/48] vhost-user-vsock-pci: " Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 19/48] vhost-vsock-ccw: " Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 20/48] virtio: update MemoryRegionCaches when guest set bad features Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 21/48] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 22/48] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 23/48] x86: cpuhp: refuse cpu hot-unplug request earlier if not supported Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 24/48] acpi: add aml_land() and aml_break() primitives Michael S. Tsirkin
2020-09-29  7:21 ` [PULL v4 25/48] tests: acpi: mark to be changed tables in bios-tables-test-allowed-diff Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 26/48] x86: ich9: expose "smi_negotiated_features" as a QOM property Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 27/48] x86: acpi: introduce AcpiPmInfo::smi_on_cpuhp Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 28/48] x86: acpi: introduce the PCI0.SMI0 ACPI device Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 29/48] x68: acpi: trigger SMI before sending hotplug Notify event to OSPM Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 30/48] tests: acpi: update acpi blobs with new AML Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 31/48] hw/smbios: support loading OEM strings values from a file Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 32/48] hw/smbios: report error if table size is too large Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 33/48] qemu-options: document SMBIOS type 11 settings Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 34/48] vhost-user: save features of multiqueues if chardev is closed Michael S. Tsirkin
2021-05-12  7:58   ` Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 35/48] tests/acpi: mark addition of table DSDT.roothp for unit testing root pci hotplug Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 36/48] tests/acpi: add new unit test to test hotplug off/on feature on the root pci bus Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 37/48] tests/acpi: add a new ACPI table in order to test root pci hotplug on/off Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 38/48] Fix a gap where acpi_pcihp_find_hotplug_bus() returns a non-hotpluggable bus Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 39/48] i440fx/acpi: do not add hotplug related amls for cold plugged bridges Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 40/48] tests/acpi: list added acpi table binary file for pci bridge hotplug test Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 41/48] tests/acpi: unit test for 'acpi-pci-hotplug-with-bridge-support' bridge flag Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 42/48] tests/acpi: add newly added acpi DSDT table blob for pci bridge hotplug flag Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 43/48] Add ACPI DSDT tables for q35 that are being updated by the next patch Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 44/48] piix4: don't reserve hw resources when hotplug is off globally Michael S. Tsirkin
2020-11-07 10:10   ` Philippe Mathieu-Daudé
2020-11-07 11:14     ` Philippe Mathieu-Daudé
2020-11-07 12:22     ` Ani Sinha
2020-11-07 14:18       ` Philippe Mathieu-Daudé
2020-11-07 14:28         ` Michael S. Tsirkin
2020-09-29  7:22 ` [PULL v4 45/48] tests/acpi: update golden master DSDT binary table blobs for q35 Michael S. Tsirkin
2020-09-29  7:23 ` [PULL v4 46/48] hw: virtio-pmem: detach the element fromt the virtqueue when error occurs Michael S. Tsirkin
2020-09-29  7:23 ` [PULL v4 47/48] libvhost-user: return early on virtqueue errors Michael S. Tsirkin
2020-09-29  7:23 ` [PULL v4 48/48] libvhost-user: return on error in vu_log_queue_fill() Michael S. Tsirkin
2020-09-29  7:25 ` [PULL v4 02/48] vhost: switch to use IOTLB v2 format Michael S. Tsirkin
2020-09-29  8:13 ` [PULL v4 00/48] virtio,pc,acpi: fixes, tests no-reply
2020-09-29  8:50 ` no-reply
2020-09-29 11:02 ` Peter Maydell
2020-09-29 11:04 ` Michael S. Tsirkin
2020-09-29 11:07   ` Peter Maydell
2020-09-29 11:13     ` Michael S. Tsirkin
2020-10-01  9:16       ` Laszlo Ersek

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=20200929071948.281157-17-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=sgarzare@redhat.com \
    --cc=thuth@redhat.com \
    /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).