[dpdk-dev] [PATCH v2 0/4] Vhost: fix mq=on but VIRTIO_NET_F_MQ not negotiated
Maxime Coquelin
maxime.coquelin at redhat.com
Tue Dec 5 09:34:30 CET 2017
Hi,
This second revision only fixes the bit shifting issue reported by
Ladi (patch 1/4).
Having QEMU started with mq=on but guest driver not negotiating
VIRTIO_NET_F_MQ feature ends up in the vhost device to never
start. Indeed, more queues are created in the vhost backend than
configured.
Guest drivers known to not advertise the VIRTIO_NET_F_MQ feature are
iPXE and OVMF Virtio-net drivers.
Queues are created because before starting the guest, QEMU sends
VHOST_USER_SET_VRING_CALL requests for all queues declared in QEMU
command line. Also, once Virtio features negotiated, QEMU sends
VHOST_USER_SET_VRING_ENABLE requests to disable all but the first
queue pair.
This series fixes this by destroying all but first queue pair in
the backend if VIRTIO_NET_F_MQ isn't negotiated. First patches
makes sure that VHOST_USER_SET_FEATURES request doesn't change
Virtio features while the device is running, which should never
happen as per the Virtio spec. This helps to make sure vitqueues
aren't destroyed while being processed, but also protect from
other illegal features changes (e.g. VIRTIO_NET_F_MRG_RXBUF).
Changes since v1:
=================
- Patch 1: shift bits in the right direction (Ladi)
Maxime Coquelin (4):
vhost: prevent features to be changed while device is running
vhost: propagate VHOST_USER_SET_FEATURES handling error
vhost: extract virtqueue cleaning and freeing functions
vhost: destroy unused virtqueues when multiqueue not negotiated
lib/librte_vhost/vhost.c | 22 ++++++++++++----------
lib/librte_vhost/vhost.h | 3 +++
lib/librte_vhost/vhost_user.c | 40 ++++++++++++++++++++++++++++++++++++++--
3 files changed, 53 insertions(+), 12 deletions(-)
--
2.14.3
More information about the dev
mailing list