[Top][All Lists]

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

[RFC PATCH v1 1/3] virtio: introduce virtio_force_modern()

From: Halil Pasic
Subject: [RFC PATCH v1 1/3] virtio: introduce virtio_force_modern()
Date: Fri, 29 Oct 2021 00:00:15 +0200

Legacy vs modern should be detected via transport specific means. We
can't wait till feature negotiation is done. Let us introduce
virtio_force_modern() as a means for the transport code to signal
that the device should operate in modern mode (because a modern driver
was detected).

Signed-off-by: Halil Pasic <pasic@linux.ibm.com>

I'm still struggling with how to deal with vhost-user and co. The
problem is that I'm not very familiar with the life-cycle of, let us
say, a vhost_user device.

Looks to me like the vhost part might be just an implementation detail,
and could even become a hot swappable thing.

Another thing is, that vhost processes set_features differently. It
might or might not be a good idea to change this.

Does anybody know why don't we propagate the features on features_set,
but under a set of different conditions, one of which is the vhost
device is started?
 hw/virtio/virtio.c         | 12 ++++++++++++
 include/hw/virtio/virtio.h |  1 +
 2 files changed, 13 insertions(+)

diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 3a1f6c520c..75aee0e098 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -3281,6 +3281,18 @@ void virtio_init(VirtIODevice *vdev, const char *name,
     vdev->use_guest_notifier_mask = true;
+void  virtio_force_modern(VirtIODevice *vdev)
+    /*
+     * This takes care of the devices that implement config space access
+     * in QEMU. For vhost-user and similar we need to make sure the features
+     * are actually propagated to the device implementing the config space.
+     *
+     * A VirtioDeviceClass callback may be a good idea.
+     */
+    virtio_set_features(vdev, (1ULL << VIRTIO_F_VERSION_1));
  * Only devices that have already been around prior to defining the virtio
  * standard support legacy mode; this includes devices not specified in the
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 8bab9cfb75..2ea92de7a5 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -394,6 +394,7 @@ static inline bool virtio_device_disabled(VirtIODevice 
     return unlikely(vdev->disabled || vdev->broken);
+void  virtio_force_modern(VirtIODevice *vdev);
 bool virtio_legacy_allowed(VirtIODevice *vdev);
 bool virtio_legacy_check_disabled(VirtIODevice *vdev);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]