All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kirti Wankhede <kwankhede@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Cc: "Zhang, Tina" <tina.zhang@intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Chen, Xiaoguang" <xiaoguang.chen@intel.com>,
	"intel-gvt-dev@lists.freedesktop.org" 
	<intel-gvt-dev@lists.freedesktop.org>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>,
	"Wang, Zhi A" <zhi.a.wang@intel.com>,
	"Wang, Zhenyu Z" <zhenyu.z.wang@intel.com>
Subject: Re: [Intel-gfx] [PATCH v9 5/7] vfio: Define vfio based dma-buf operations
Date: Tue, 20 Jun 2017 22:37:29 +0530	[thread overview]
Message-ID: <6a0d2856-46d8-1640-150f-88a34d1afd55@nvidia.com> (raw)
In-Reply-To: <20170620090004.44ac7fbc@w520.home>



On 6/20/2017 8:30 PM, Alex Williamson wrote:
> On Tue, 20 Jun 2017 12:57:36 +0200
> Gerd Hoffmann <kraxel@redhat.com> wrote:
> 
>> On Tue, 2017-06-20 at 08:41 +0000, Zhang, Tina wrote:
>>> Hi,
>>>
>>> Thanks for all the comments. Here are the summaries:
>>>
>>> 1. Modify the structures to make it more general.
>>> struct vfio_device_gfx_plane_info {
>>> 	__u64 start;
>>> 	__u64 drm_format_mod;
>>> 	__u32 drm_format;
>>> 	__u32 width;
>>> 	__u32 height;
>>> 	__u32 stride;
>>> 	__u32 size;
>>> 	__u32 x_pos;
>>> 	__u32 y_pos;
>>> 	__u32 generation;
>>> };  
>>
>> Looks good to me.
>>
>>> struct vfio_device_query_gfx_plane {
>>> 	__u32 argsz;
>>> 	__u32 flags;
>>> #define VFIO_GFX_PLANE_FLAGS_REGION_ID		(1 << 0)
>>> #define VFIO_GFX_PLANE_FLAGS_PLANE_ID		(1 << 1)
>>> 	struct vfio_device_gfx_plane_info plane_info;
>>> 	__u32 id; 
>>> };  
>>
>> I'm not convinced the flags are a great idea.  Whenever dmabufs or a
>> region is used is a static property of the device, not of each
>> individual plane.
>>
>>
>> I think we should have this for userspace to figure:
>>
>> enum vfio_device_gfx_type {
>>         VFIO_DEVICE_GFX_NONE,
>>         VFIO_DEVICE_GFX_DMABUF,
>>         VFIO_DEVICE_GFX_REGION,
>> };
>>
>> struct vfio_device_gfx_query_caps {
>>         __u32 argsz;
>>         __u32 flags;
>>         enum vfio_device_gfx_type;
>> };
> 
> We already have VFIO_DEVICE_GET_INFO which returns:
> 
> struct vfio_device_info {
>         __u32   argsz;
>         __u32   flags;
> #define VFIO_DEVICE_FLAGS_RESET (1 << 0)        /* Device supports reset */
> #define VFIO_DEVICE_FLAGS_PCI   (1 << 1)        /* vfio-pci device */
> #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)     /* vfio-platform device */
> #define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)        /* vfio-amba device */
> #define VFIO_DEVICE_FLAGS_CCW   (1 << 4)        /* vfio-ccw device */
>         __u32   num_regions;    /* Max region index + 1 */
>         __u32   num_irqs;       /* Max IRQ index + 1 */
> };
> 
> We could use two flag bits to indicate dmabuf or graphics region
> support.  vfio_device_gfx_query_caps seems to imply a new ioctl, which
> would be unnecessary.
>

Sounds good to me.

>> Then this to query the plane:
>>
>> struct vfio_device_gfx_query_plane {
>>         __u32 argsz;
>>         __u32 flags;
>>         struct vfio_device_gfx_plane_info plane_info;  /* out */
>>         __u32 plane_type;                              /* in  */
>> };
> 
> I'm not sure why we're using an enum for something that can currently
> be defined with 2 bits, seems like this would be another good use of
> flags.  We could even embed an enum into the flags if we want to
> leave some expansion room, 4 bits maybe?  Also, I was imagining that a
> device could support multiple graphics regions, that's where specifying
> the "id" as a region index seemed useful.  We lose that ability here
> unless we go back to defining a flag bit to specify how to interpret
> this last field.
> 

Right, as I mentioned in earlier reply, we need 2 seperate fields
- plane type : DRM_PLANE_TYPE_PRIMARY or DRM_PLANE_TYPE_CURSOR
- id : fd for dmabuf or region index for region type


>> 2. Remove dmabuf mgr fd and add these two ioctl commands to the vfio
>> device fd.
>>> VFIO_DEVICE_QUERY_GFX_PLANE : used to query
>>> vfio_device_gfx_plane_info.  
>>
>> Yes.
>>
>>> VFIO_DEVICE_GET_DMABUF_FD: used to create and return the dmabuf fd.  
> 
> I'm not convinced this adds value, but I'll list it as an option:
> 
> VFIO_DEVICE_QUERY(VFIO_DEVICE_GFX_PLANE)
> VFIO_DEVICE_GET_FD(VFIO_DEVICE_GFX_DMABUF_FD)
> 
> The benefit is that it might help to avoid a proliferation of ioctls on
> the device the pain is that we need to either define a field or section
> of flags which identify what is being queried or what type of device fd
> is being requested.
> 
>> Yes.  The plane might have changed between query-plane and get-dmabuf
>> ioctl calls though, we must make sure we handle that somehow.  Current
>> patches return plane_info on get-dmabuf ioctl too, so userspace can see
>> what it actually got.
>>
>> With the generation we can also do something different:  Pass in
>> plane_type and generation, and have VFIO_DEVICE_GET_DMABUF_FD return
>> an error in case the generation doesn't match.  In that case it doesn't
>> make much sense any more to have a separate plane_info struct, which
>> was added so we don't have to duplicate things in query-plane and get-
>> dmabuf ioctl structs.
> 
> I'm not sure I understand how this works for a region, the region is
> always the current generation, how can the user ever be sure the
> plane_info matches what is exposed in the region?  Thanks,
>

Userspace have to follow the sequence to query plane info
(VFIO_DEVICE_QUERY_GFX_PLANE) and then read primary surface from the region.
On kernel space side, from VFIO_DEVICE_QUERY_GFX_PLANE ioctl, driver
should update surface which is being exposed by the GFX region, fill
vfio_device_gfx_plane_info structure then return. GFX region surface
would only get updated from this ioctl.

Thanks,
Kirti

WARNING: multiple messages have this Message-ID (diff)
From: Kirti Wankhede <kwankhede@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Cc: "Wang, Zhenyu Z" <zhenyu.z.wang@intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Chen, Xiaoguang" <xiaoguang.chen@intel.com>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>,
	"intel-gvt-dev@lists.freedesktop.org"
	<intel-gvt-dev@lists.freedesktop.org>
Subject: Re: [PATCH v9 5/7] vfio: Define vfio based dma-buf operations
Date: Tue, 20 Jun 2017 22:37:29 +0530	[thread overview]
Message-ID: <6a0d2856-46d8-1640-150f-88a34d1afd55@nvidia.com> (raw)
In-Reply-To: <20170620090004.44ac7fbc@w520.home>



On 6/20/2017 8:30 PM, Alex Williamson wrote:
> On Tue, 20 Jun 2017 12:57:36 +0200
> Gerd Hoffmann <kraxel@redhat.com> wrote:
> 
>> On Tue, 2017-06-20 at 08:41 +0000, Zhang, Tina wrote:
>>> Hi,
>>>
>>> Thanks for all the comments. Here are the summaries:
>>>
>>> 1. Modify the structures to make it more general.
>>> struct vfio_device_gfx_plane_info {
>>> 	__u64 start;
>>> 	__u64 drm_format_mod;
>>> 	__u32 drm_format;
>>> 	__u32 width;
>>> 	__u32 height;
>>> 	__u32 stride;
>>> 	__u32 size;
>>> 	__u32 x_pos;
>>> 	__u32 y_pos;
>>> 	__u32 generation;
>>> };  
>>
>> Looks good to me.
>>
>>> struct vfio_device_query_gfx_plane {
>>> 	__u32 argsz;
>>> 	__u32 flags;
>>> #define VFIO_GFX_PLANE_FLAGS_REGION_ID		(1 << 0)
>>> #define VFIO_GFX_PLANE_FLAGS_PLANE_ID		(1 << 1)
>>> 	struct vfio_device_gfx_plane_info plane_info;
>>> 	__u32 id; 
>>> };  
>>
>> I'm not convinced the flags are a great idea.  Whenever dmabufs or a
>> region is used is a static property of the device, not of each
>> individual plane.
>>
>>
>> I think we should have this for userspace to figure:
>>
>> enum vfio_device_gfx_type {
>>         VFIO_DEVICE_GFX_NONE,
>>         VFIO_DEVICE_GFX_DMABUF,
>>         VFIO_DEVICE_GFX_REGION,
>> };
>>
>> struct vfio_device_gfx_query_caps {
>>         __u32 argsz;
>>         __u32 flags;
>>         enum vfio_device_gfx_type;
>> };
> 
> We already have VFIO_DEVICE_GET_INFO which returns:
> 
> struct vfio_device_info {
>         __u32   argsz;
>         __u32   flags;
> #define VFIO_DEVICE_FLAGS_RESET (1 << 0)        /* Device supports reset */
> #define VFIO_DEVICE_FLAGS_PCI   (1 << 1)        /* vfio-pci device */
> #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)     /* vfio-platform device */
> #define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)        /* vfio-amba device */
> #define VFIO_DEVICE_FLAGS_CCW   (1 << 4)        /* vfio-ccw device */
>         __u32   num_regions;    /* Max region index + 1 */
>         __u32   num_irqs;       /* Max IRQ index + 1 */
> };
> 
> We could use two flag bits to indicate dmabuf or graphics region
> support.  vfio_device_gfx_query_caps seems to imply a new ioctl, which
> would be unnecessary.
>

Sounds good to me.

>> Then this to query the plane:
>>
>> struct vfio_device_gfx_query_plane {
>>         __u32 argsz;
>>         __u32 flags;
>>         struct vfio_device_gfx_plane_info plane_info;  /* out */
>>         __u32 plane_type;                              /* in  */
>> };
> 
> I'm not sure why we're using an enum for something that can currently
> be defined with 2 bits, seems like this would be another good use of
> flags.  We could even embed an enum into the flags if we want to
> leave some expansion room, 4 bits maybe?  Also, I was imagining that a
> device could support multiple graphics regions, that's where specifying
> the "id" as a region index seemed useful.  We lose that ability here
> unless we go back to defining a flag bit to specify how to interpret
> this last field.
> 

Right, as I mentioned in earlier reply, we need 2 seperate fields
- plane type : DRM_PLANE_TYPE_PRIMARY or DRM_PLANE_TYPE_CURSOR
- id : fd for dmabuf or region index for region type


>> 2. Remove dmabuf mgr fd and add these two ioctl commands to the vfio
>> device fd.
>>> VFIO_DEVICE_QUERY_GFX_PLANE : used to query
>>> vfio_device_gfx_plane_info.  
>>
>> Yes.
>>
>>> VFIO_DEVICE_GET_DMABUF_FD: used to create and return the dmabuf fd.  
> 
> I'm not convinced this adds value, but I'll list it as an option:
> 
> VFIO_DEVICE_QUERY(VFIO_DEVICE_GFX_PLANE)
> VFIO_DEVICE_GET_FD(VFIO_DEVICE_GFX_DMABUF_FD)
> 
> The benefit is that it might help to avoid a proliferation of ioctls on
> the device the pain is that we need to either define a field or section
> of flags which identify what is being queried or what type of device fd
> is being requested.
> 
>> Yes.  The plane might have changed between query-plane and get-dmabuf
>> ioctl calls though, we must make sure we handle that somehow.  Current
>> patches return plane_info on get-dmabuf ioctl too, so userspace can see
>> what it actually got.
>>
>> With the generation we can also do something different:  Pass in
>> plane_type and generation, and have VFIO_DEVICE_GET_DMABUF_FD return
>> an error in case the generation doesn't match.  In that case it doesn't
>> make much sense any more to have a separate plane_info struct, which
>> was added so we don't have to duplicate things in query-plane and get-
>> dmabuf ioctl structs.
> 
> I'm not sure I understand how this works for a region, the region is
> always the current generation, how can the user ever be sure the
> plane_info matches what is exposed in the region?  Thanks,
>

Userspace have to follow the sequence to query plane info
(VFIO_DEVICE_QUERY_GFX_PLANE) and then read primary surface from the region.
On kernel space side, from VFIO_DEVICE_QUERY_GFX_PLANE ioctl, driver
should update surface which is being exposed by the GFX region, fill
vfio_device_gfx_plane_info structure then return. GFX region surface
would only get updated from this ioctl.

Thanks,
Kirti
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2017-06-20 17:07 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-15  8:00 [PATCH v9 0/7] drm/i915/gvt: Dma-buf support for GVT-g Xiaoguang Chen
2017-06-15  8:00 ` Xiaoguang Chen
2017-06-15  8:00 ` [PATCH v9 1/7] drm/i915/gvt: Extend the GVT-g architecture Xiaoguang Chen
2017-06-15  8:00 ` [PATCH v9 2/7] drm/i915/gvt: OpRegion support for GVT-g Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15  8:00 ` [PATCH v9 3/7] drm: Extend the drm format Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15 10:21   ` [Intel-gfx] " Ville Syrjälä
2017-06-15 10:21     ` Ville Syrjälä
2017-06-20  9:01     ` [Intel-gfx] " Zhang, Tina
2017-06-20  9:01       ` Zhang, Tina
2017-06-15  8:00 ` [PATCH v9 4/7] drm/i915/gvt: Frame buffer decoder support for GVT-g Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15  8:00 ` [PATCH v9 5/7] vfio: Define vfio based dma-buf operations Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15 14:51   ` Kirti Wankhede
2017-06-15 14:51     ` Kirti Wankhede
2017-06-15 16:00     ` Gerd Hoffmann
2017-06-15 16:00       ` Gerd Hoffmann
2017-06-15 20:38       ` Alex Williamson
2017-06-15 20:38         ` Alex Williamson
2017-06-16 10:24         ` Gerd Hoffmann
2017-06-16 12:52           ` Alex Williamson
2017-06-16 13:32         ` Kirti Wankhede
2017-06-16 13:32           ` Kirti Wankhede
2017-06-16 16:39           ` Alex Williamson
2017-06-16 16:39             ` Alex Williamson
2017-06-16 18:28             ` Kirti Wankhede
2017-06-16 18:28               ` Kirti Wankhede
2017-06-19  6:34             ` Gerd Hoffmann
2017-06-19 14:54               ` Alex Williamson
2017-06-19 14:54                 ` Alex Williamson
2017-06-20  8:35                 ` Gerd Hoffmann
2017-06-20  8:35                   ` Gerd Hoffmann
2017-06-20 13:55                   ` Kirti Wankhede
2017-06-20 13:55                     ` Kirti Wankhede
2017-06-21  7:22                     ` Gerd Hoffmann
2017-07-12 13:18                       ` Kirti Wankhede
2017-07-12 13:18                         ` Kirti Wankhede
2017-07-14  9:58                         ` Gerd Hoffmann
2017-07-14  9:58                           ` Gerd Hoffmann
2017-06-19  6:38           ` Gerd Hoffmann
2017-06-19 14:55             ` Alex Williamson
2017-06-19 14:55               ` Alex Williamson
2017-06-20  8:41               ` [Intel-gfx] " Zhang, Tina
2017-06-20  8:41                 ` Zhang, Tina
2017-06-20 10:57                 ` [Intel-gfx] " Gerd Hoffmann
2017-06-20 10:57                   ` Gerd Hoffmann
2017-06-20 15:00                   ` [Intel-gfx] " Alex Williamson
2017-06-20 15:00                     ` Alex Williamson
2017-06-20 17:07                     ` Kirti Wankhede [this message]
2017-06-20 17:07                       ` Kirti Wankhede
2017-06-20 23:01                     ` [Intel-gfx] " Zhang, Tina
2017-06-20 23:01                       ` Zhang, Tina
2017-06-20 23:22                       ` [Intel-gfx] " Alex Williamson
2017-06-20 23:22                         ` Alex Williamson
2017-06-21  9:20                         ` [Intel-gfx] " Zhang, Tina
2017-06-21  9:20                           ` Zhang, Tina
2017-06-21 11:03                           ` [Intel-gfx] " Gerd Hoffmann
2017-06-21 11:03                             ` Gerd Hoffmann
2017-06-21 18:59                             ` Alex Williamson
2017-06-21 18:59                               ` Alex Williamson
2017-06-22  8:30                               ` Gerd Hoffmann
2017-06-22  8:30                                 ` Gerd Hoffmann
2017-06-22 18:54                                 ` [Intel-gfx] " Alex Williamson
2017-06-22 18:54                                   ` Alex Williamson
2017-06-23  7:26                                   ` [Intel-gfx] " Gerd Hoffmann
2017-06-23  7:26                                     ` Gerd Hoffmann
2017-06-23  7:49                                     ` [Intel-gfx] " Zhi Wang
2017-06-23  7:49                                       ` Zhi Wang
2017-06-23  8:31                                       ` Gerd Hoffmann
2017-06-23  8:31                                         ` Gerd Hoffmann
2017-06-23 16:40                                         ` Alex Williamson
2017-06-23 16:40                                           ` Alex Williamson
2017-06-23 17:15                                     ` [Intel-gfx] " Alex Williamson
2017-06-23 17:15                                       ` Alex Williamson
2017-06-26  6:17                                       ` [Intel-gfx] " Gerd Hoffmann
2017-06-26  6:17                                         ` Gerd Hoffmann
2017-06-22  0:21                             ` [Intel-gfx] " Zhang, Tina
2017-06-22  0:21                               ` Zhang, Tina
2017-06-21  7:34                     ` [Intel-gfx] " Gerd Hoffmann
2017-06-21  7:34                       ` Gerd Hoffmann
2017-06-23 21:58                   ` [Intel-gfx] " Zhang, Tina
2017-06-23 21:58                     ` Zhang, Tina
2017-06-26  6:39                     ` [Intel-gfx] " Gerd Hoffmann
2017-06-26  6:39                       ` Gerd Hoffmann
2017-06-26 17:28                       ` [Intel-gfx] " Alex Williamson
2017-06-26 17:28                         ` Alex Williamson
2017-06-27  6:12                         ` [Intel-gfx] " Gerd Hoffmann
2017-06-27  6:12                           ` Gerd Hoffmann
2017-06-28 12:48                           ` [Intel-gfx] " Zhang, Tina
2017-06-28 12:48                             ` Zhang, Tina
2017-06-29  6:41                             ` [Intel-gfx] " Gerd Hoffmann
2017-06-29  6:41                               ` Gerd Hoffmann
2017-06-29  8:39                               ` [Intel-gfx] " Daniel Vetter
2017-06-29  8:39                                 ` Daniel Vetter
2017-07-04  0:47                                 ` [Intel-gfx] " Zhang, Tina
2017-07-04  0:47                                   ` Zhang, Tina
2017-06-20 13:35               ` Kirti Wankhede
2017-06-20 13:35                 ` Kirti Wankhede
2017-06-15  8:00 ` [PATCH v9 6/7] drm/i915/gvt: Dmabuf support for GVT-g Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15  8:00 ` [PATCH v9 7/7] drm/i915/gvt: Adding user interface for dma-buf Xiaoguang Chen
2017-06-15  8:00   ` Xiaoguang Chen
2017-06-15  8:03 ` ✗ Fi.CI.BAT: failure for drm/i915/gvt: dma-buf support for GVT-g (rev9) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6a0d2856-46d8-1640-150f-88a34d1afd55@nvidia.com \
    --to=kwankhede@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=kraxel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tina.zhang@intel.com \
    --cc=xiaoguang.chen@intel.com \
    --cc=zhenyu.z.wang@intel.com \
    --cc=zhi.a.wang@intel.com \
    --cc=zhiyuan.lv@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.