qemu/net
Changchun Ouyang b931bfbf04 vhost-user: add multiple queue support
This patch is initially based a patch from Nikolay Nikolaev.

This patch adds vhost-user multiple queue support, by creating a nc
and vhost_net pair for each queue.

Qemu exits if find that the backend can't support the number of requested
queues (by providing queues=# option). The max number is queried by a
new message, VHOST_USER_GET_QUEUE_NUM, and is sent only when protocol
feature VHOST_USER_PROTOCOL_F_MQ is present first.

The max queue check is done at vhost-user initiation stage. We initiate
one queue first, which, in the meantime, also gets the max_queues the
backend supports.

In older version, it was reported that some messages are sent more times
than necessary. Here we came an agreement with Michael that we could
categorize vhost user messages to 2 types: non-vring specific messages,
which should be sent only once, and vring specific messages, which should
be sent per queue.

Here I introduced a helper function vhost_user_one_time_request(), which
lists following messages as non-vring specific messages:

        VHOST_USER_SET_OWNER
        VHOST_USER_RESET_DEVICE
        VHOST_USER_SET_MEM_TABLE
        VHOST_USER_GET_QUEUE_NUM

For above messages, we simply ignore them when they are not sent the first
time.

Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>
Signed-off-by: Changchun Ouyang <changchun.ouyang@intel.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Jason Wang <jasowang@redhat.com>
Tested-by: Marcel Apfelbaum <marcel@redhat.com>
2015-09-24 16:27:53 +03:00
..
checksum.c net: iovec checksum calculator 2013-03-25 11:13:10 +01:00
clients.h net: Permit incremental conversion of init functions to Error 2015-05-27 09:51:04 +01:00
dump.c net/dump: Improve -net/host_net_add dump error reporting 2015-05-27 09:51:05 +01:00
eth.c misc: Use g_assert_not_reached for code which is expected to be unreachable 2013-07-27 11:22:54 +04:00
hub.c net: Permit incremental conversion of init functions to Error 2015-05-27 09:51:04 +01:00
hub.h net: fix qemu_flush_queued_packets() in presence of a hub 2013-02-27 16:10:23 +01:00
l2tpv3.c Include monitor/monitor.h exactly where needed 2015-06-22 18:20:41 +02:00
Makefile.objs net: add mmsghdr struct check for L2TPV3 2014-07-01 17:42:23 +01:00
net.c net: Flush queued packets when guest resumes 2015-07-20 18:11:24 +01:00
netmap.c Change qemu_set_fd_handler2(..., NULL, ...) to qemu_set_fd_handler 2015-06-12 13:26:21 +01:00
queue.c net: Use g_new() & friends where that makes obvious sense 2014-12-19 13:17:02 +00:00
slirp.c qerror: Move #include out of qerror.h 2015-06-22 18:20:40 +02:00
socket.c socket: pass correct size in net_socket_send() 2015-07-20 17:39:05 +01:00
tap_int.h tap: add VNET_LE/VNET_BE operations 2015-06-17 17:12:54 +02:00
tap-aix.c tap: fix non-linux build 2015-06-19 12:17:25 +02:00
tap-bsd.c tap: fix non-linux build 2015-06-19 12:17:25 +02:00
tap-haiku.c tap: fix non-linux build 2015-06-19 12:17:25 +02:00
tap-linux.c trivial: remove trailing newline from error_report 2015-09-11 10:21:38 +03:00
tap-linux.h tap: add VNET_LE/VNET_BE operations 2015-06-17 17:12:54 +02:00
tap-solaris.c tap: fix non-linux build 2015-06-19 12:17:25 +02:00
tap-win32.c tap: fix non-linux build 2015-06-19 12:17:25 +02:00
tap.c virtio, pci fixes, enhancements 2015-06-19 11:30:57 +01:00
util.c net: reorganize headers 2012-12-19 08:31:29 +01:00
util.h net: move parse_macaddr() to net/util.[ch] 2009-12-03 09:41:34 -06:00
vde.c net: Permit incremental conversion of init functions to Error 2015-05-27 09:51:04 +01:00
vhost-user.c vhost-user: add multiple queue support 2015-09-24 16:27:53 +03:00