diff mbox series

[12/21] vhost-vdpa: introduce uAPI to get the number of virtqueue groups

Message ID 20201216064818.48239-13-jasowang@redhat.com
State New
Headers show
Series Control VQ support in vDPA | expand

Commit Message

Jason Wang Dec. 16, 2020, 6:48 a.m. UTC
Follows the vDPA support for multiple address spaces, this patch
introduce uAPI for the userspace to know the number of virtqueue
groups supported by the vDPA device.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 drivers/vhost/vdpa.c       | 4 ++++
 include/uapi/linux/vhost.h | 3 +++
 2 files changed, 7 insertions(+)

Comments

Eli Cohen Dec. 29, 2020, 12:24 p.m. UTC | #1
On Wed, Dec 16, 2020 at 02:48:09PM +0800, Jason Wang wrote:
> Follows the vDPA support for multiple address spaces, this patch

> introduce uAPI for the userspace to know the number of virtqueue

> groups supported by the vDPA device.


Can you explain what exactly you mean be userspace? Is it just qemu or
is it destined to the virtio_net driver run by the qemu process?
Also can you say for what purpose?

> 

> Signed-off-by: Jason Wang <jasowang@redhat.com>

> ---

>  drivers/vhost/vdpa.c       | 4 ++++

>  include/uapi/linux/vhost.h | 3 +++

>  2 files changed, 7 insertions(+)

> 

> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c

> index 060d5b5b7e64..1ba5901b28e7 100644

> --- a/drivers/vhost/vdpa.c

> +++ b/drivers/vhost/vdpa.c

> @@ -536,6 +536,10 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,

>  	case VHOST_VDPA_GET_VRING_NUM:

>  		r = vhost_vdpa_get_vring_num(v, argp);

>  		break;

> +	case VHOST_VDPA_GET_GROUP_NUM:

> +		r = copy_to_user(argp, &v->vdpa->ngroups,

> +				 sizeof(v->vdpa->ngroups));

> +		break;

>  	case VHOST_SET_LOG_BASE:

>  	case VHOST_SET_LOG_FD:

>  		r = -ENOIOCTLCMD;

> diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h

> index 59c6c0fbaba1..8a4e6e426bbf 100644

> --- a/include/uapi/linux/vhost.h

> +++ b/include/uapi/linux/vhost.h

> @@ -145,4 +145,7 @@

>  /* Get the valid iova range */

>  #define VHOST_VDPA_GET_IOVA_RANGE	_IOR(VHOST_VIRTIO, 0x78, \

>  					     struct vhost_vdpa_iova_range)

> +/* Get the number of virtqueue groups. */

> +#define VHOST_VDPA_GET_GROUP_NUM	_IOR(VHOST_VIRTIO, 0x79, unsigned int)

> +

>  #endif

> -- 

> 2.25.1

>
Jason Wang Dec. 30, 2020, 6:49 a.m. UTC | #2
On 2020/12/29 下午8:24, Eli Cohen wrote:
> On Wed, Dec 16, 2020 at 02:48:09PM +0800, Jason Wang wrote:

>> Follows the vDPA support for multiple address spaces, this patch

>> introduce uAPI for the userspace to know the number of virtqueue

>> groups supported by the vDPA device.

> Can you explain what exactly you mean be userspace?



It's the userspace that uses the uAPI introduced in this patch.


> Is it just qemu or

> is it destined to the virtio_net driver run by the qemu process?



It could be Qemu, DPDK or other userspace program.

The guest virtio-net driver will not use this but talks to the virtio 
device emulated by Qemu.


> Also can you say for what purpose?



This can be used for facilitate the checking of whether the control vq 
could be supported.

E.g if the device support less than 2 groups, qemu won't advertise 
control vq.

Yes, #groups could be inferred from GET_VRING_GROUP. But it's not 
straightforward as this.

Thanks


>

>> Signed-off-by: Jason Wang <jasowang@redhat.com>

>> ---

>>   drivers/vhost/vdpa.c       | 4 ++++

>>   include/uapi/linux/vhost.h | 3 +++

>>   2 files changed, 7 insertions(+)

>>

>> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c

>> index 060d5b5b7e64..1ba5901b28e7 100644

>> --- a/drivers/vhost/vdpa.c

>> +++ b/drivers/vhost/vdpa.c

>> @@ -536,6 +536,10 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,

>>   	case VHOST_VDPA_GET_VRING_NUM:

>>   		r = vhost_vdpa_get_vring_num(v, argp);

>>   		break;

>> +	case VHOST_VDPA_GET_GROUP_NUM:

>> +		r = copy_to_user(argp, &v->vdpa->ngroups,

>> +				 sizeof(v->vdpa->ngroups));

>> +		break;

>>   	case VHOST_SET_LOG_BASE:

>>   	case VHOST_SET_LOG_FD:

>>   		r = -ENOIOCTLCMD;

>> diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h

>> index 59c6c0fbaba1..8a4e6e426bbf 100644

>> --- a/include/uapi/linux/vhost.h

>> +++ b/include/uapi/linux/vhost.h

>> @@ -145,4 +145,7 @@

>>   /* Get the valid iova range */

>>   #define VHOST_VDPA_GET_IOVA_RANGE	_IOR(VHOST_VIRTIO, 0x78, \

>>   					     struct vhost_vdpa_iova_range)

>> +/* Get the number of virtqueue groups. */

>> +#define VHOST_VDPA_GET_GROUP_NUM	_IOR(VHOST_VIRTIO, 0x79, unsigned int)

>> +

>>   #endif

>> -- 

>> 2.25.1

>>
Eli Cohen Dec. 30, 2020, 10:05 a.m. UTC | #3
On Wed, Dec 16, 2020 at 02:48:09PM +0800, Jason Wang wrote:
> Follows the vDPA support for multiple address spaces, this patch

> introduce uAPI for the userspace to know the number of virtqueue

> groups supported by the vDPA device.

> 

> Signed-off-by: Jason Wang <jasowang@redhat.com>

> ---

>  drivers/vhost/vdpa.c       | 4 ++++

>  include/uapi/linux/vhost.h | 3 +++

>  2 files changed, 7 insertions(+)

> 

> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c

> index 060d5b5b7e64..1ba5901b28e7 100644

> --- a/drivers/vhost/vdpa.c

> +++ b/drivers/vhost/vdpa.c

> @@ -536,6 +536,10 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,

>  	case VHOST_VDPA_GET_VRING_NUM:

>  		r = vhost_vdpa_get_vring_num(v, argp);

>  		break;

> +	case VHOST_VDPA_GET_GROUP_NUM:

> +		r = copy_to_user(argp, &v->vdpa->ngroups,

> +				 sizeof(v->vdpa->ngroups));

> +		break;


Is this and other ioctls already supported in qemu?

>  	case VHOST_SET_LOG_BASE:

>  	case VHOST_SET_LOG_FD:

>  		r = -ENOIOCTLCMD;

> diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h

> index 59c6c0fbaba1..8a4e6e426bbf 100644

> --- a/include/uapi/linux/vhost.h

> +++ b/include/uapi/linux/vhost.h

> @@ -145,4 +145,7 @@

>  /* Get the valid iova range */

>  #define VHOST_VDPA_GET_IOVA_RANGE	_IOR(VHOST_VIRTIO, 0x78, \

>  					     struct vhost_vdpa_iova_range)

> +/* Get the number of virtqueue groups. */

> +#define VHOST_VDPA_GET_GROUP_NUM	_IOR(VHOST_VIRTIO, 0x79, unsigned int)

> +

>  #endif

> -- 

> 2.25.1

>
Jason Wang Dec. 31, 2020, 2:36 a.m. UTC | #4
On 2020/12/30 下午6:05, Eli Cohen wrote:
> On Wed, Dec 16, 2020 at 02:48:09PM +0800, Jason Wang wrote:

>> Follows the vDPA support for multiple address spaces, this patch

>> introduce uAPI for the userspace to know the number of virtqueue

>> groups supported by the vDPA device.

>>

>> Signed-off-by: Jason Wang<jasowang@redhat.com>

>> ---

>>   drivers/vhost/vdpa.c       | 4 ++++

>>   include/uapi/linux/vhost.h | 3 +++

>>   2 files changed, 7 insertions(+)

>>

>> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c

>> index 060d5b5b7e64..1ba5901b28e7 100644

>> --- a/drivers/vhost/vdpa.c

>> +++ b/drivers/vhost/vdpa.c

>> @@ -536,6 +536,10 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,

>>   	case VHOST_VDPA_GET_VRING_NUM:

>>   		r = vhost_vdpa_get_vring_num(v, argp);

>>   		break;

>> +	case VHOST_VDPA_GET_GROUP_NUM:

>> +		r = copy_to_user(argp, &v->vdpa->ngroups,

>> +				 sizeof(v->vdpa->ngroups));

>> +		break;

> Is this and other ioctls already supported in qemu?



Not yet, the prototype is under development.

I test the series with a small and dedicated userspace program.

Thanks


>
diff mbox series

Patch

diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 060d5b5b7e64..1ba5901b28e7 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -536,6 +536,10 @@  static long vhost_vdpa_unlocked_ioctl(struct file *filep,
 	case VHOST_VDPA_GET_VRING_NUM:
 		r = vhost_vdpa_get_vring_num(v, argp);
 		break;
+	case VHOST_VDPA_GET_GROUP_NUM:
+		r = copy_to_user(argp, &v->vdpa->ngroups,
+				 sizeof(v->vdpa->ngroups));
+		break;
 	case VHOST_SET_LOG_BASE:
 	case VHOST_SET_LOG_FD:
 		r = -ENOIOCTLCMD;
diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h
index 59c6c0fbaba1..8a4e6e426bbf 100644
--- a/include/uapi/linux/vhost.h
+++ b/include/uapi/linux/vhost.h
@@ -145,4 +145,7 @@ 
 /* Get the valid iova range */
 #define VHOST_VDPA_GET_IOVA_RANGE	_IOR(VHOST_VIRTIO, 0x78, \
 					     struct vhost_vdpa_iova_range)
+/* Get the number of virtqueue groups. */
+#define VHOST_VDPA_GET_GROUP_NUM	_IOR(VHOST_VIRTIO, 0x79, unsigned int)
+
 #endif