vhost: destroy unused virtqueues when multiqueue not negotiated
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Wed, 13 Dec 2017 08:51:09 +0000 (09:51 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
commite29109323595beb3884da58126ebb3b878cb66f5
treeebba58b944dfcb6ae478477a9ade770516a675f1
parent467fe22df94b85d2df67b9be3ccbfb3dd72cdd6d
vhost: destroy unused virtqueues when multiqueue not negotiated

QEMU sends VHOST_USER_SET_VRING_CALL requests for all queues
declared in QEMU command line before the guest is started.
It has the effect in DPDK vhost-user backend to allocate vrings
for all queues declared by QEMU.

If the first driver being used does not support multiqueue,
the device never changes to VIRTIO_DEV_RUNNING state as only
the first queue pair is initialized. One driver impacted by
this bug is virtio-net's iPXE driver which does not support
VIRTIO_NET_F_MQ feature.

It is safe to destroy unused virtqueues in SET_FEATURES request
handler, as it is ensured the device is not in running state
at this stage, so virtqueues aren't being processed.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
lib/librte_vhost/vhost_user.c