mirror of
https://github.com/qemu/qemu.git
synced 2025-08-07 23:16:19 +00:00
libqos: add missing virtio-9p feature negotiation
VIRTIO Device Initialization requires feature negotiation. The libqos virtio-9p driver lacks feature negotiation and is therefore non-compliant. libqos tests acknowledge all feature bits advertised by the device, except VIRTIO_F_BAD_FEATURE (which devices use to detect broken drivers!) and VIRTIO_RING_F_EVENT_IDX (which is not implemented in libqos and accepting it would break notifications). Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20191023100425.12168-7-stefanha@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Thomas Huth" <thuth@redhat.com>
This commit is contained in:
parent
36d27d2120
commit
c5bd6d02e6
@ -32,6 +32,12 @@ static void virtio_9p_cleanup(QVirtio9P *interface)
|
|||||||
|
|
||||||
static void virtio_9p_setup(QVirtio9P *interface)
|
static void virtio_9p_setup(QVirtio9P *interface)
|
||||||
{
|
{
|
||||||
|
uint64_t features;
|
||||||
|
|
||||||
|
features = qvirtio_get_features(interface->vdev);
|
||||||
|
features &= ~(QVIRTIO_F_BAD_FEATURE | (1ull << VIRTIO_RING_F_EVENT_IDX));
|
||||||
|
qvirtio_set_features(interface->vdev, features);
|
||||||
|
|
||||||
interface->vq = qvirtqueue_setup(interface->vdev, alloc, 0);
|
interface->vq = qvirtqueue_setup(interface->vdev, alloc, 0);
|
||||||
qvirtio_set_driver_ok(interface->vdev);
|
qvirtio_set_driver_ok(interface->vdev);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user