All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	qemu-stable@nongnu.org, #@redhat.com, dependency@redhat.com,
	for@redhat.com, the@redhat.com, next@redhat.com,
	patch@redhat.com, Cornelia Huck <cornelia.huck@de.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Alexander Graf <agraf@suse.de>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PULL v2 14/34] virtio: allow per-device-class legacy features
Date: Fri, 11 Nov 2016 20:10:45 +0200	[thread overview]
Message-ID: <1478887767-31980-15-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1478887767-31980-1-git-send-email-mst@redhat.com>

Legacy features are those that transitional devices only
expose on the legacy interface.
Allow different ones per device class.

Cc: qemu-stable@nongnu.org # dependency for the next patch
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 include/hw/virtio/virtio.h | 5 +++++
 hw/s390x/virtio-ccw.c      | 4 +++-
 hw/virtio/virtio-pci.c     | 4 +++-
 hw/virtio/virtio.c         | 2 ++
 4 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index f12a1a8..bdb3c4b 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -113,6 +113,11 @@ typedef struct VirtioDeviceClass {
     void (*set_config)(VirtIODevice *vdev, const uint8_t *config);
     void (*reset)(VirtIODevice *vdev);
     void (*set_status)(VirtIODevice *vdev, uint8_t val);
+    /* For transitional devices, this is a bitmap of features
+     * that are only exposed on the legacy interface but not
+     * the modern one.
+     */
+    uint64_t legacy_features;
     /* Test and clear event pending status.
      * Should be called after unmask to avoid losing events.
      * If backend does not support masking,
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 7d7f8f6..f5c1d98 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -303,6 +303,8 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
         if (!ccw.cda) {
             ret = -EFAULT;
         } else {
+            VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
+
             features.index = address_space_ldub(&address_space_memory,
                                                 ccw.cda
                                                 + sizeof(features.features),
@@ -312,7 +314,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
                 if (dev->revision >= 1) {
                     /* Don't offer legacy features for modern devices. */
                     features.features = (uint32_t)
-                        (vdev->host_features & ~VIRTIO_LEGACY_FEATURES);
+                        (vdev->host_features & ~vdc->legacy_features);
                 } else {
                     features.features = (uint32_t)vdev->host_features;
                 }
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 62001b4..97b32fe 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1175,7 +1175,9 @@ static uint64_t virtio_pci_common_read(void *opaque, hwaddr addr,
         break;
     case VIRTIO_PCI_COMMON_DF:
         if (proxy->dfselect <= 1) {
-            val = (vdev->host_features & ~VIRTIO_LEGACY_FEATURES) >>
+            VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
+
+            val = (vdev->host_features & ~vdc->legacy_features) >>
                 (32 * proxy->dfselect);
         }
         break;
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 1df5f4e..72ee06b 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2214,6 +2214,8 @@ static void virtio_device_class_init(ObjectClass *klass, void *data)
     dc->props = virtio_properties;
     vdc->start_ioeventfd = virtio_device_start_ioeventfd_impl;
     vdc->stop_ioeventfd = virtio_device_stop_ioeventfd_impl;
+
+    vdc->legacy_features |= VIRTIO_LEGACY_FEATURES;
 }
 
 bool virtio_device_ioeventfd_enabled(VirtIODevice *vdev)
-- 
MST

  parent reply	other threads:[~2016-11-11 18:10 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-11 18:09 [Qemu-devel] [PULL v2 00/34] virtio, vhost, pc, pci: tests, documentation, fixes and cleanups Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 01/34] tests/vhost-user-bridge: remove false comment Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 02/34] tests/vhost-user-bridge: remove unnecessary dispatcher_remove Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 03/34] tests/vhost-user-bridge: indicate peer disconnected Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 04/34] tests/vhost-user-bridge: do not accept more than one connection Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 05/34] contrib: add libvhost-user Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 06/34] tests/vhost-user-bridge: use contrib/libvhost-user Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 07/34] intel_iommu: fixing source id during IOTLB hash key calculation Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 08/34] virtio: rename virtqueue_discard to virtqueue_unpop Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 09/34] virtio: make virtqueue_alloc_element static Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 10/34] virtio-crypto: tag as not hotpluggable and migration Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 11/34] intel_iommu: fix several incorrect endianess and bit fields Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 12/34] intel_iommu: fix incorrect assert Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 13/34] acpi: fix DMAR device scope for IOAPIC Michael S. Tsirkin
2016-11-11 18:10 ` Michael S. Tsirkin [this message]
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 15/34] virtio-net: mark VIRTIO_NET_F_GSO as legacy Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 16/34] vhost: migration blocker only if shared log is used Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 17/34] qdev: hotplug: drop HotplugHandler.post_plug callback Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 18/34] nvdimm acpi: drop the lock of fit buffer Michael S. Tsirkin
2016-11-11 18:10 ` [Qemu-devel] [PULL v2 19/34] pc: memhp: move nvdimm hotplug out of memory hotplug Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 20/34] pc: memhp: stop handling nvdimm hotplug in pc_dimm_unplug Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 21/34] nvdimm acpi: clean up nvdimm_build_acpi Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 22/34] docs: improve the doc of Read FIT method Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 23/34] nvdimm acpi: rename nvdimm_plugged_device_list Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 24/34] nvdimm acpi: cleanup nvdimm_build_fit Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 25/34] nvdimm acpi: rename nvdimm_acpi_hotplug Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 26/34] nvdimm acpi: define DSM return codes Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 27/34] nvdimm acpi: fix two comments Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 28/34] nvdimm acpi: rename nvdimm_dsm_reserved_root Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 29/34] nvdimm acpi: use aml_name_decl to define named object Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 30/34] nvdimm acpi: introduce NVDIMM_DSM_MEMORY_SIZE Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 31/34] vhost: adapt vhost_verify_ring_mappings() to virtio 1 ring layout Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 32/34] vhost: drop legacy vring layout bits Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 33/34] virtio: drop virtio_queue_get_ring_{size, addr}() Michael S. Tsirkin
2016-11-11 18:11 ` [Qemu-devel] [PULL v2 34/34] docs: add PCIe devices placement guidelines Michael S. Tsirkin
2016-11-14 15:52 ` [Qemu-devel] [PULL v2 00/34] virtio, vhost, pc, pci: tests, documentation, fixes and cleanups Stefan Hajnoczi
2016-11-14 23:19   ` Michael S. Tsirkin
2016-11-15 10:56     ` Stefan Hajnoczi
2016-11-17 14:16 ` no-reply
2016-11-17 16:44   ` Michael S. Tsirkin
2016-11-17 17:04     ` Fam Zheng

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=1478887767-31980-15-git-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=#@redhat.com \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=dependency@redhat.com \
    --cc=for@redhat.com \
    --cc=next@redhat.com \
    --cc=patch@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=the@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.