diff options
| author | Eugenio Pérez <eperezma@redhat.com> | 2026-01-19 15:33:05 +0100 |
|---|---|---|
| committer | Michael S. Tsirkin <mst@redhat.com> | 2026-01-28 15:32:18 -0500 |
| commit | 12e0043d335f6c8badfe98f1d8f5e1910d430cf0 (patch) | |
| tree | 8bce26ade34ac7bef52933d770e74245b4ffb6c1 | |
| parent | 079212f6877e5d07308c8998a8fbc7539ca3f8f3 (diff) | |
vduse: bump version number
Finalize the series by advertising VDUSE API v1 support to userspace.
Now that all required infrastructure for v1 (ASIDs, VQ groups,
update_iotlb_v2) is in place, VDUSE devices can opt in to the new
features.
Assume API version 0 if the VDUSE instance does not call
VDUSE_GET_API_VERSION to maintain compatibility.
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20260119143306.1818855-13-eperezma@redhat.com>
| -rw-r--r-- | drivers/vdpa/vdpa_user/vduse_dev.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c index 2727c0c26003..73d1d517dc6c 100644 --- a/drivers/vdpa/vdpa_user/vduse_dev.c +++ b/drivers/vdpa/vdpa_user/vduse_dev.c @@ -52,6 +52,15 @@ #define IRQ_UNBOUND -1 +/* + * VDUSE instance have not asked the vduse API version, so assume 0. + * + * Old devices may not ask for the device version and assume it is 0. Keep + * this value for these. From the moment the VDUSE instance ask for the + * version, convert to the latests supported one and continue regular flow + */ +#define VDUSE_API_VERSION_NOT_ASKED U64_MAX + struct vduse_virtqueue { u16 index; u16 num_max; @@ -2153,6 +2162,8 @@ static long vduse_ioctl(struct file *file, unsigned int cmd, mutex_lock(&vduse_lock); switch (cmd) { case VDUSE_GET_API_VERSION: + if (control->api_version == VDUSE_API_VERSION_NOT_ASKED) + control->api_version = VDUSE_API_VERSION_1; ret = put_user(control->api_version, (u64 __user *)argp); break; case VDUSE_SET_API_VERSION: { @@ -2163,7 +2174,7 @@ static long vduse_ioctl(struct file *file, unsigned int cmd, break; ret = -EINVAL; - if (api_version > VDUSE_API_VERSION) + if (api_version > VDUSE_API_VERSION_1) break; ret = 0; @@ -2180,6 +2191,8 @@ static long vduse_ioctl(struct file *file, unsigned int cmd, break; ret = -EINVAL; + if (control->api_version == VDUSE_API_VERSION_NOT_ASKED) + control->api_version = VDUSE_API_VERSION; if (!vduse_validate_config(&config, control->api_version)) break; @@ -2230,7 +2243,7 @@ static int vduse_open(struct inode *inode, struct file *file) if (!control) return -ENOMEM; - control->api_version = VDUSE_API_VERSION; + control->api_version = VDUSE_API_VERSION_NOT_ASKED; file->private_data = control; return 0; |
