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
|