 a9f98bb5eb
			
		
	
	
		a9f98bb5eb
		
	
	
	
	
		
			
			This patch lets vhost support multiqueue. The idea is simple, just launching
multiple threads of vhost and let each of vhost thread processing a subset of
the virtqueues of the device. After this change each emulated device can have
multiple vhost threads as its backend.
To do this, a virtqueue index were introduced to record to first virtqueue that
will be handled by this vhost_net device. Based on this and nvqs, vhost could
calculate its relative index to setup vhost_net device.
Since we may have many vhost/net devices for a virtio-net device. The setting of
guest notifiers were moved out of the starting/stopping of a specific vhost
thread. The vhost_net_{start|stop}() were renamed to
vhost_net_{start|stop}_one(), and a new vhost_net_{start|stop}() were introduced
to configure the guest notifiers and start/stop all vhost/vhost_net devices.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
		
	
			
		
			
				
	
	
		
			24 lines
		
	
	
		
			796 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			796 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef VHOST_NET_H
 | |
| #define VHOST_NET_H
 | |
| 
 | |
| #include "net/net.h"
 | |
| 
 | |
| struct vhost_net;
 | |
| typedef struct vhost_net VHostNetState;
 | |
| 
 | |
| VHostNetState *vhost_net_init(NetClientState *backend, int devfd, bool force);
 | |
| 
 | |
| bool vhost_net_query(VHostNetState *net, VirtIODevice *dev);
 | |
| int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, int total_queues);
 | |
| void vhost_net_stop(VirtIODevice *dev, NetClientState *ncs, int total_queues);
 | |
| 
 | |
| void vhost_net_cleanup(VHostNetState *net);
 | |
| 
 | |
| unsigned vhost_net_get_features(VHostNetState *net, unsigned features);
 | |
| void vhost_net_ack_features(VHostNetState *net, unsigned features);
 | |
| 
 | |
| bool vhost_net_virtqueue_pending(VHostNetState *net, int n);
 | |
| void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,
 | |
|                               int idx, bool mask);
 | |
| #endif
 |