From: Maxime Coquelin <[email protected]> As preliminary step to support new VDUSE API version introducing ASID support, this patch adds API version negotiation to keep compatibility with older kernels.
Signed-off-by: Maxime Coquelin <[email protected]> Signed-off-by: Eugenio Pérez <[email protected]> --- lib/vhost/vduse.c | 14 ++++++++++++-- lib/vhost/vhost.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index 49f2f23b9703..fc52b4cd0703 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -25,7 +25,7 @@ #include "vhost.h" #include "virtio_net_ctrl.h" -#define VHOST_VDUSE_API_VERSION 0 +#define VHOST_VDUSE_API_VERSION 0ULL #define VDUSE_CTRL_PATH "/dev/vduse/control" struct vduse { @@ -680,7 +680,7 @@ vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool uint32_t i, max_queue_pairs, total_queues; struct virtio_net *dev; struct virtio_net_config vnet_config = {{ 0 }}; - uint64_t ver = VHOST_VDUSE_API_VERSION; + uint64_t ver; uint64_t features; const char *name = path + strlen("/dev/vduse/"); bool reconnect = false; @@ -700,6 +700,15 @@ vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool return -1; } + if (ioctl(control_fd, VDUSE_GET_API_VERSION, &ver)) { + VHOST_CONFIG_LOG(name, ERR, "Failed to get API version: %s", strerror(errno)); + ret = -1; + goto out_ctrl_close; + } + + ver = RTE_MIN(ver, VHOST_VDUSE_API_VERSION); + VHOST_CONFIG_LOG(name, INFO, "Using VDUSE API version %" PRIu64 "", ver); + if (ioctl(control_fd, VDUSE_SET_API_VERSION, &ver)) { VHOST_CONFIG_LOG(name, ERR, "Failed to set API version: %" PRIu64 ": %s", ver, strerror(errno)); @@ -800,6 +809,7 @@ vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool strncpy(dev->ifname, path, IF_NAME_SZ - 1); dev->vduse_ctrl_fd = control_fd; dev->vduse_dev_fd = dev_fd; + dev->vduse_api_ver = ver; ret = vduse_reconnect_log_map(dev, !reconnect); if (ret < 0) diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h index fef493016df5..50b09da5ecf7 100644 --- a/lib/vhost/vhost.h +++ b/lib/vhost/vhost.h @@ -532,6 +532,7 @@ struct __rte_cache_aligned virtio_net { int postcopy_listening; int vduse_ctrl_fd; int vduse_dev_fd; + uint64_t vduse_api_ver; struct vhost_virtqueue *cvq; -- 2.53.0

