On Wed, Dec 6, 2017 at 10:20 AM, Maxime Coquelin <maxime.coque...@redhat.com> wrote: > Hi, > > This third revision reworks the VQs destruction loop to fixes the > of-by-one error reported by Laszlo. > > 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 v2: > ================= > - Patch 2: Rework & fix VQs destruction loop (Laszlo) > 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 | 39 +++++++++++++++++++++++++++++++++++++-- > 3 files changed, 52 insertions(+), 12 deletions(-)
I have verified that it fixes iPXE and that a full-featured virtio-net driver successfully takes over the device using all queues. Haven't tested OVMF but it should be safe to assume that it's fixed as well. Tested-by: Ladi Prosek <lpro...@redhat.com> Thank you! Ladi