[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 14/34] virtio: allow per-device-class legacy featu
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL v2 14/34] virtio: allow per-device-class legacy features |
Date: |
Fri, 11 Nov 2016 20:10:45 +0200 |
Legacy features are those that transitional devices only
expose on the legacy interface.
Allow different ones per device class.
Cc: address@hidden # dependency for the next patch
Signed-off-by: Michael S. Tsirkin <address@hidden>
Reviewed-by: Cornelia Huck <address@hidden>
---
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
- [Qemu-devel] [PULL v2 05/34] contrib: add libvhost-user, (continued)
- [Qemu-devel] [PULL v2 05/34] contrib: add libvhost-user, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 06/34] tests/vhost-user-bridge: use contrib/libvhost-user, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 08/34] virtio: rename virtqueue_discard to virtqueue_unpop, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 07/34] intel_iommu: fixing source id during IOTLB hash key calculation, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 11/34] intel_iommu: fix several incorrect endianess and bit fields, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 09/34] virtio: make virtqueue_alloc_element static, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 12/34] intel_iommu: fix incorrect assert, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 10/34] virtio-crypto: tag as not hotpluggable and migration, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 13/34] acpi: fix DMAR device scope for IOAPIC, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 15/34] virtio-net: mark VIRTIO_NET_F_GSO as legacy, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 14/34] virtio: allow per-device-class legacy features,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL v2 16/34] vhost: migration blocker only if shared log is used, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 17/34] qdev: hotplug: drop HotplugHandler.post_plug callback, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 18/34] nvdimm acpi: drop the lock of fit buffer, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 19/34] pc: memhp: move nvdimm hotplug out of memory hotplug, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 20/34] pc: memhp: stop handling nvdimm hotplug in pc_dimm_unplug, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 21/34] nvdimm acpi: clean up nvdimm_build_acpi, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 22/34] docs: improve the doc of Read FIT method, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 23/34] nvdimm acpi: rename nvdimm_plugged_device_list, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 24/34] nvdimm acpi: cleanup nvdimm_build_fit, Michael S. Tsirkin, 2016/11/11
- [Qemu-devel] [PULL v2 25/34] nvdimm acpi: rename nvdimm_acpi_hotplug, Michael S. Tsirkin, 2016/11/11