mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
Add vhost_ops to vhost_dev struct and replace all relevant ioctls
Decouple vhost from the Linux kernel by introducing vhost_ops. The intention is to provide different backends - a 'kernel' backend based on the ioctl interface, and an 'user' backend based on a UNIX domain socket and shared memory interface. Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com> Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
81647a655f
commit
24d1eb33eb
5 changed files with 63 additions and 27 deletions
|
@ -27,7 +27,6 @@
|
|||
#include <sys/socket.h>
|
||||
#include <linux/kvm.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/virtio_ring.h>
|
||||
#include <netpacket/packet.h>
|
||||
#include <net/ethernet.h>
|
||||
|
@ -177,7 +176,8 @@ static int vhost_net_start_one(struct vhost_net *net,
|
|||
qemu_set_fd_handler(net->backend, NULL, NULL, NULL);
|
||||
file.fd = net->backend;
|
||||
for (file.index = 0; file.index < net->dev.nvqs; ++file.index) {
|
||||
r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
|
||||
const VhostOps *vhost_ops = net->dev.vhost_ops;
|
||||
r = vhost_ops->vhost_call(&net->dev, VHOST_NET_SET_BACKEND, &file);
|
||||
if (r < 0) {
|
||||
r = -errno;
|
||||
goto fail;
|
||||
|
@ -187,7 +187,8 @@ static int vhost_net_start_one(struct vhost_net *net,
|
|||
fail:
|
||||
file.fd = -1;
|
||||
while (file.index-- > 0) {
|
||||
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
|
||||
const VhostOps *vhost_ops = net->dev.vhost_ops;
|
||||
int r = vhost_ops->vhost_call(&net->dev, VHOST_NET_SET_BACKEND, &file);
|
||||
assert(r >= 0);
|
||||
}
|
||||
if (net->nc->info->poll) {
|
||||
|
@ -210,7 +211,8 @@ static void vhost_net_stop_one(struct vhost_net *net,
|
|||
}
|
||||
|
||||
for (file.index = 0; file.index < net->dev.nvqs; ++file.index) {
|
||||
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
|
||||
const VhostOps *vhost_ops = net->dev.vhost_ops;
|
||||
int r = vhost_ops->vhost_call(&net->dev, VHOST_NET_SET_BACKEND, &file);
|
||||
assert(r >= 0);
|
||||
}
|
||||
if (net->nc->info->poll) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue