Hi All: This patch implements the multiqueue support for vhost-vDPA. The most important requirement the control virtqueue support. The virtio-net and vhost-net core are tweak to support control virtqueue as if what data queue pairs are done: a dedicated vhost_net device which is coupled with the NetClientState is intrdouced so most of the existing vhost codes could be reused with minor changes. With the control virtqueue, vhost-vDPA are extend to support creating and destroying multiqueue queue pairs plus the control virtqueue.
Tests are done via the vp_vdpa driver in L1 guest. Please reivew. Thanks Jason Wang (18): vhost_net: remove the meaningless assignment in vhost_net_start_one() vhost: use unsigned int for nvqs vhost_net: do not assume nvqs is always 2 vhost-vdpa: remove the unnecessary check in vhost_vdpa_add() vhost-vdpa: don't cleanup twice in vhost_vdpa_add() vhost-vdpa: fix leaking of vhost_net in vhost_vdpa_add() vhost-vdpa: tweak the error label in vhost_vdpa_add() vhost-vdpa: fix the wrong assertion in vhost_vdpa_init() vhost-vdpa: remove the unncessary queue_index assignment vhost-vdpa: open device fd in net_init_vhost_vdpa() vhost-vdpa: classify one time request vhost-vdpa: prepare for the multiqueue support vhost-vdpa: let net_vhost_vdpa_init() returns NetClientState * net: introduce control client vhost-net: control virtqueue support virito-net: use "qps" instead of "queues" when possible virtio-net: vhost control virtqueue support vhost-vdpa: multiqueue support hw/net/vhost_net.c | 48 +++++++--- hw/net/virtio-net.c | 165 ++++++++++++++++++--------------- hw/virtio/vhost-vdpa.c | 55 ++++++++++- include/hw/virtio/vhost-vdpa.h | 1 + include/hw/virtio/vhost.h | 2 +- include/hw/virtio/virtio-net.h | 5 +- include/net/net.h | 5 + include/net/vhost_net.h | 7 +- net/net.c | 24 ++++- net/tap.c | 1 + net/vhost-user.c | 1 + net/vhost-vdpa.c | 150 +++++++++++++++++++++++------- 12 files changed, 326 insertions(+), 138 deletions(-) -- 2.25.1