Jason Wang
2022-Mar-14 06:03 UTC
[PATCH v2 1/2] vdpa: support exposing the config size to userspace
? 2022/3/10 ??3:20, Longpeng(Mike) ??:> From: Longpeng <longpeng2 at huawei.com> > > - GET_CONFIG_SIZE: return the size of the virtio config space. > > The size contains the fields which are conditional on feature > bits. > > Signed-off-by: Longpeng <longpeng2 at huawei.com>Acked-by: Jason Wang <jasowang at redhat.com>> --- > drivers/vhost/vdpa.c | 17 +++++++++++++++++ > include/linux/vdpa.h | 3 ++- > include/uapi/linux/vhost.h | 4 ++++ > 3 files changed, 23 insertions(+), 1 deletion(-) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index ec5249e..605c7ae 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -355,6 +355,20 @@ static long vhost_vdpa_get_iova_range(struct vhost_vdpa *v, u32 __user *argp) > return 0; > } > > +static long vhost_vdpa_get_config_size(struct vhost_vdpa *v, u32 __user *argp) > +{ > + struct vdpa_device *vdpa = v->vdpa; > + const struct vdpa_config_ops *ops = vdpa->config; > + u32 size; > + > + size = ops->get_config_size(vdpa); > + > + if (copy_to_user(argp, &size, sizeof(size))) > + return -EFAULT; > + > + return 0; > +} > + > static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, > void __user *argp) > { > @@ -492,6 +506,9 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep, > case VHOST_VDPA_GET_IOVA_RANGE: > r = vhost_vdpa_get_iova_range(v, argp); > break; > + case VHOST_VDPA_GET_CONFIG_SIZE: > + r = vhost_vdpa_get_config_size(v, argp); > + break; > default: > r = vhost_dev_ioctl(&v->vdev, cmd, argp); > if (r == -ENOIOCTLCMD) > diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h > index 721089b..a526919 100644 > --- a/include/linux/vdpa.h > +++ b/include/linux/vdpa.h > @@ -207,7 +207,8 @@ struct vdpa_map_file { > * @reset: Reset device > * @vdev: vdpa device > * Returns integer: success (0) or error (< 0) > - * @get_config_size: Get the size of the configuration space > + * @get_config_size: Get the size of the configuration space includes > + * fields that are conditional on feature bits. > * @vdev: vdpa device > * Returns size_t: configuration size > * @get_config: Read from device specific configuration space > diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h > index c998860..bc74e95 100644 > --- a/include/uapi/linux/vhost.h > +++ b/include/uapi/linux/vhost.h > @@ -150,4 +150,8 @@ > /* Get the valid iova range */ > #define VHOST_VDPA_GET_IOVA_RANGE _IOR(VHOST_VIRTIO, 0x78, \ > struct vhost_vdpa_iova_range) > + > +/* Get the config size */ > +#define VHOST_VDPA_GET_CONFIG_SIZE _IOR(VHOST_VIRTIO, 0x79, __u32) > + > #endif