[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/12] virtio-ccw: handle virtio 1 only devices
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PATCH 04/12] virtio-ccw: handle virtio 1 only devices |
Date: |
Mon, 20 Feb 2017 10:57:26 +0100 |
From: Halil Pasic <address@hidden>
As a preparation for wiring-up virtio-crypto, the first non-transitional
virtio device on the ccw transport, let us introduce a mechanism for
disabling revision 0. This is more or less equivalent with disabling
legacy as revision 0 is legacy only, and legacy drivers use the revision
0 exclusively.
Signed-off-by: Halil Pasic <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
hw/s390x/virtio-ccw.c | 18 +++++++++++++++++-
hw/s390x/virtio-ccw.h | 1 +
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 63c46373fb..32c414f23d 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -280,6 +280,15 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
ccw.cmd_code);
check_len = !((ccw.flags & CCW_FLAG_SLI) && !(ccw.flags & CCW_FLAG_DC));
+ if (dev->force_revision_1 && dev->revision < 0 &&
+ ccw.cmd_code != CCW_CMD_SET_VIRTIO_REV) {
+ /*
+ * virtio-1 drivers must start with negotiating to a revision >= 1,
+ * so post a command reject for all other commands
+ */
+ return -ENOSYS;
+ }
+
/* Look at the command. */
switch (ccw.cmd_code) {
case CCW_CMD_SET_VQ:
@@ -638,7 +647,8 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
* need to fetch it here. Nothing to do for now, though.
*/
if (dev->revision >= 0 ||
- revinfo.revision > virtio_ccw_rev_max(dev)) {
+ revinfo.revision > virtio_ccw_rev_max(dev) ||
+ (dev->force_revision_1 && !revinfo.revision)) {
ret = -ENOSYS;
break;
}
@@ -669,6 +679,12 @@ static void virtio_ccw_device_realize(VirtioCcwDevice
*dev, Error **errp)
if (!sch) {
return;
}
+ if (!virtio_ccw_rev_max(dev) && dev->force_revision_1) {
+ error_setg(&err, "Invalid value of property max_rev "
+ "(is %d expected >= 1)", virtio_ccw_rev_max(dev));
+ error_propagate(errp, err);
+ return;
+ }
sch->driver_data = dev;
sch->ccw_cb = virtio_ccw_cb;
diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
index 77d10f1671..6a04e94f66 100644
--- a/hw/s390x/virtio-ccw.h
+++ b/hw/s390x/virtio-ccw.h
@@ -94,6 +94,7 @@ struct VirtioCcwDevice {
IndAddr *indicators2;
IndAddr *summary_indicator;
uint64_t ind_bit;
+ bool force_revision_1;
};
/* The maximum virtio revision we support. */
--
2.11.0
- [Qemu-devel] [PATCH 00/12] more s390x patches for 2.9, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 02/12] s390x/kvm: detect some program check loops, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 01/12] s390x/s390-virtio: get rid of DPRINTF, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 05/12] virtio-ccw: add virtio-crypto-ccw device, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 03/12] s390x/flic: fail migration on source already, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 08/12] virtio-ccw: check flic->adapter_routes_max_batch, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 07/12] s390x: add property adapter_routes_max_batch, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 06/12] virtio-ccw: Check the number of vqs in CCW_CMD_SET_IND, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 04/12] virtio-ccw: handle virtio 1 only devices,
Cornelia Huck <=
- [Qemu-devel] [PATCH 09/12] s390x: bump ADAPTER_ROUTES_MAX_GSI, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 11/12] s390x/arch_dump: use proper note name and note size, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 12/12] s390x/arch_dump: pass cpuid into notes sections, Cornelia Huck, 2017/02/20
- [Qemu-devel] [PATCH 10/12] virtio-ccw: support VIRTIO_QUEUE_MAX virtqueues, Cornelia Huck, 2017/02/20