mirror of https://github.com/xemu-project/xemu.git
vhost-vdpa: allow passing opened vhostfd to vhost-vdpa
Similar to other vhost backends, vhostfd can be passed to vhost-vdpa backend as another parameter to instantiate vhost-vdpa net client. This would benefit the use case where only open file descriptors, as opposed to raw vhost-vdpa device paths, are accessible from the QEMU process. (qemu) netdev_add type=vhost-vdpa,vhostfd=61,id=vhost-vdpa1 Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com> Acked-by: Eugenio Pérez <eperezma@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
6ce262fbe7
commit
8801ccd050
|
@ -634,14 +634,29 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
|
||||||
|
|
||||||
assert(netdev->type == NET_CLIENT_DRIVER_VHOST_VDPA);
|
assert(netdev->type == NET_CLIENT_DRIVER_VHOST_VDPA);
|
||||||
opts = &netdev->u.vhost_vdpa;
|
opts = &netdev->u.vhost_vdpa;
|
||||||
if (!opts->vhostdev) {
|
if (!opts->has_vhostdev && !opts->has_vhostfd) {
|
||||||
error_setg(errp, "vdpa character device not specified with vhostdev");
|
error_setg(errp,
|
||||||
|
"vhost-vdpa: neither vhostdev= nor vhostfd= was specified");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdpa_device_fd = qemu_open(opts->vhostdev, O_RDWR, errp);
|
if (opts->has_vhostdev && opts->has_vhostfd) {
|
||||||
if (vdpa_device_fd == -1) {
|
error_setg(errp,
|
||||||
return -errno;
|
"vhost-vdpa: vhostdev= and vhostfd= are mutually exclusive");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts->has_vhostdev) {
|
||||||
|
vdpa_device_fd = qemu_open(opts->vhostdev, O_RDWR, errp);
|
||||||
|
if (vdpa_device_fd == -1) {
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
} else if (opts->has_vhostfd) {
|
||||||
|
vdpa_device_fd = monitor_fd_param(monitor_cur(), opts->vhostfd, errp);
|
||||||
|
if (vdpa_device_fd == -1) {
|
||||||
|
error_prepend(errp, "vhost-vdpa: unable to parse vhostfd: ");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r = vhost_vdpa_get_features(vdpa_device_fd, &features, errp);
|
r = vhost_vdpa_get_features(vdpa_device_fd, &features, errp);
|
||||||
|
|
|
@ -442,6 +442,8 @@
|
||||||
# @vhostdev: path of vhost-vdpa device
|
# @vhostdev: path of vhost-vdpa device
|
||||||
# (default:'/dev/vhost-vdpa-0')
|
# (default:'/dev/vhost-vdpa-0')
|
||||||
#
|
#
|
||||||
|
# @vhostfd: file descriptor of an already opened vhost vdpa device
|
||||||
|
#
|
||||||
# @queues: number of queues to be created for multiqueue vhost-vdpa
|
# @queues: number of queues to be created for multiqueue vhost-vdpa
|
||||||
# (default: 1)
|
# (default: 1)
|
||||||
#
|
#
|
||||||
|
@ -456,6 +458,7 @@
|
||||||
{ 'struct': 'NetdevVhostVDPAOptions',
|
{ 'struct': 'NetdevVhostVDPAOptions',
|
||||||
'data': {
|
'data': {
|
||||||
'*vhostdev': 'str',
|
'*vhostdev': 'str',
|
||||||
|
'*vhostfd': 'str',
|
||||||
'*queues': 'int',
|
'*queues': 'int',
|
||||||
'*x-svq': {'type': 'bool', 'features' : [ 'unstable'] } } }
|
'*x-svq': {'type': 'bool', 'features' : [ 'unstable'] } } }
|
||||||
|
|
||||||
|
|
|
@ -2790,8 +2790,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
|
||||||
" configure a vhost-user network, backed by a chardev 'dev'\n"
|
" configure a vhost-user network, backed by a chardev 'dev'\n"
|
||||||
#endif
|
#endif
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
"-netdev vhost-vdpa,id=str,vhostdev=/path/to/dev\n"
|
"-netdev vhost-vdpa,id=str[,vhostdev=/path/to/dev][,vhostfd=h]\n"
|
||||||
" configure a vhost-vdpa network,Establish a vhost-vdpa netdev\n"
|
" configure a vhost-vdpa network,Establish a vhost-vdpa netdev\n"
|
||||||
|
" use 'vhostdev=/path/to/dev' to open a vhost vdpa device\n"
|
||||||
|
" use 'vhostfd=h' to connect to an already opened vhost vdpa device\n"
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_VMNET
|
#ifdef CONFIG_VMNET
|
||||||
"-netdev vmnet-host,id=str[,isolated=on|off][,net-uuid=uuid]\n"
|
"-netdev vmnet-host,id=str[,isolated=on|off][,net-uuid=uuid]\n"
|
||||||
|
@ -3296,7 +3298,7 @@ SRST
|
||||||
-netdev type=vhost-user,id=net0,chardev=chr0 \
|
-netdev type=vhost-user,id=net0,chardev=chr0 \
|
||||||
-device virtio-net-pci,netdev=net0
|
-device virtio-net-pci,netdev=net0
|
||||||
|
|
||||||
``-netdev vhost-vdpa,vhostdev=/path/to/dev``
|
``-netdev vhost-vdpa[,vhostdev=/path/to/dev][,vhostfd=h]``
|
||||||
Establish a vhost-vdpa netdev.
|
Establish a vhost-vdpa netdev.
|
||||||
|
|
||||||
vDPA device is a device that uses a datapath which complies with
|
vDPA device is a device that uses a datapath which complies with
|
||||||
|
|
Loading…
Reference in New Issue