After going through the previous discussions, here are some summaries may be related to the current discussion: 1. How does user mode figure the device capabilities between region and dma-buf? VFIO_DEVICE_GET_REGION_INFO could tell if the mdev supports region case. Otherwise, the mdev supports dma-buf. 2. For dma-buf, how to differentiate unsupported vs not initialized? For dma-buf, when the mdev doesn't support some arguments, -EINVAL will be returned. And -errno will return when meeting other failures, like -ENOMEM. If the mdev is not initialized, there won't be any returned err. Just zero all the fields in structure vfio_device_gfx_plane_info. 3. The id field in structure vfio_device_gfx_plane_info So far we haven't figured out the usage of this field for dma-buf usage. So, this field is changed to "region_index" and only used for region usage. In previous discussions, we thought this "id" field might be used for both dma-buf and region usages. So, we proposed some ways, like adding flags field to the structure. Another way to do it was to add this: 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; }; Obviously, we don't need to consider this again, unless we find the "region_index" means something for dma-buf usage. Thanks. BR, Tina > -----Original Message----- > From: Zhang, Tina > Sent: Monday, August 7, 2017 11:23 AM > To: 'Alex Williamson' <alex.williamson@xxxxxxxxxx> > Cc: Tian, Kevin <kevin.tian@xxxxxxxxx>; intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri- > devel@xxxxxxxxxxxxxxxxxxxxx; kwankhede@xxxxxxxxxx; kraxel@xxxxxxxxxx; > intel-gvt-dev@xxxxxxxxxxxxxxxxxxxxx; Wang, Zhi A <zhi.a.wang@xxxxxxxxx>; Lv, > Zhiyuan <zhiyuan.lv@xxxxxxxxx> > Subject: RE: [PATCH v13 5/7] vfio: ABI for mdev display dma-buf operation > > > > > -----Original Message----- > > From: dri-devel [mailto:dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] On > > Behalf Of Alex Williamson > > Sent: Thursday, August 3, 2017 10:43 PM > > To: Zhang, Tina <tina.zhang@xxxxxxxxx> > > Cc: Tian, Kevin <kevin.tian@xxxxxxxxx>; > > intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri- devel@xxxxxxxxxxxxxxxxxxxxx; > > kwankhede@xxxxxxxxxx; kraxel@xxxxxxxxxx; > > intel-gvt-dev@xxxxxxxxxxxxxxxxxxxxx; Wang, Zhi A > > <zhi.a.wang@xxxxxxxxx>; Lv, Zhiyuan <zhiyuan.lv@xxxxxxxxx> > > Subject: Re: [PATCH v13 5/7] vfio: ABI for mdev display dma-buf > > operation > > > > On Thu, 3 Aug 2017 07:08:15 +0000 > > "Zhang, Tina" <tina.zhang@xxxxxxxxx> wrote: > > > > > > -----Original Message----- > > > > From: Alex Williamson [mailto:alex.williamson@xxxxxxxxxx] > > > > Sent: Thursday, August 3, 2017 11:38 AM > > > > To: Zhang, Tina <tina.zhang@xxxxxxxxx> > > > > Cc: Tian, Kevin <kevin.tian@xxxxxxxxx>; > > > > intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri- devel@xxxxxxxxxxxxxxxxxxxxx; > > > > kwankhede@xxxxxxxxxx; kraxel@xxxxxxxxxx; > > > > intel-gvt-dev@xxxxxxxxxxxxxxxxxxxxx; Wang, Zhi A > > > > <zhi.a.wang@xxxxxxxxx>; Lv, Zhiyuan <zhiyuan.lv@xxxxxxxxx> > > > > Subject: Re: [PATCH v13 5/7] vfio: ABI for mdev display dma-buf > > > > operation > > > > > > > > On Thu, 3 Aug 2017 03:17:09 +0000 > > > > "Zhang, Tina" <tina.zhang@xxxxxxxxx> wrote: > > > > > > > > > > -----Original Message----- > > > > > > From: dri-devel > > > > > > [mailto:dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] > > > > > > On Behalf Of Alex Williamson > > > > > > Sent: Wednesday, August 2, 2017 5:18 AM > > > > > > To: Zhang, Tina <tina.zhang@xxxxxxxxx> > > > > > > Cc: Tian, Kevin <kevin.tian@xxxxxxxxx>; kraxel@xxxxxxxxxx; > > > > > > intel- gfx@xxxxxxxxxxxxxxxxxxxxx; Wang, Zhi A > > > > > > <zhi.a.wang@xxxxxxxxx>; kwankhede@xxxxxxxxxx; > > > > > > dri-devel@xxxxxxxxxxxxxxxxxxxxx; intel-gvt- > > > > > > dev@xxxxxxxxxxxxxxxxxxxxx; Lv, Zhiyuan <zhiyuan.lv@xxxxxxxxx> > > > > > > Subject: Re: [PATCH v13 5/7] vfio: ABI for mdev display > > > > > > dma-buf operation > > > > > > > > > > > > On Tue, 25 Jul 2017 17:28:18 +0800 Tina Zhang > > > > > > <tina.zhang@xxxxxxxxx> wrote: > > > > > > > > > > > > > Add VFIO_DEVICE_QUERY_GFX_PLANE ioctl command to let user > > mode > > > > > > > query and get the plan and its related information. > > > > > > > > > > > > > > The dma-buf's life cycle is handled by user mode and tracked by > kernel. > > > > > > > The returned fd in struct vfio_device_query_gfx_plane can be > > > > > > > a new fd or an old fd of a re-exported dma-buf. Host User > > > > > > > mode can check the value of fd and to see if it needs to > > > > > > > create new resource according to the new fd or just use the > > > > > > > existed resource related to the old > > > > fd. > > > > > > > > > > > > > > Signed-off-by: Tina Zhang <tina.zhang@xxxxxxxxx> > > > > > > > --- > > > > > > > include/uapi/linux/vfio.h | 28 ++++++++++++++++++++++++++++ > > > > > > > 1 file changed, 28 insertions(+) > > > > > > > > > > > > > > diff --git a/include/uapi/linux/vfio.h > > > > > > > b/include/uapi/linux/vfio.h index ae46105..827a230 100644 > > > > > > > --- a/include/uapi/linux/vfio.h > > > > > > > +++ b/include/uapi/linux/vfio.h > > > > > > > @@ -502,6 +502,34 @@ struct vfio_pci_hot_reset { > > > > > > > > > > > > > > #define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, > VFIO_BASE + > > > > > > 13) > > > > > > > > > > > > > > +/** > > > > > > > + * VFIO_DEVICE_QUERY_GFX_PLANE - _IOW(VFIO_TYPE, > VFIO_BASE > > + > > > > 14, > > > > > > > +struct vfio_device_query_gfx_plane) > > > > > > > + * > > > > > > > + * Set the drm_plane_type and retrieve information about > > > > > > > +the gfx > > plane. > > > > > > > + * > > > > > > > + * Return: 0 on success, -errno on failure. > > > > > > > + */ > > > > > > > +struct vfio_device_gfx_plane_info { > > > > > > > + __u32 argsz; > > > > > > > + __u32 flags; > > > > > > > + /* in */ > > > > > > > + __u32 drm_plane_type; /* type of plane: DRM_PLANE_TYPE_* > > */ > > > > > > > + /* out */ > > > > > > > + __u32 drm_format; /* drm format of plane */ > > > > > > > + __u64 drm_format_mod; /* tiled mode */ > > > > > > > + __u32 width; /* width of plane */ > > > > > > > + __u32 height; /* height of plane */ > > > > > > > + __u32 stride; /* stride of plane */ > > > > > > > + __u32 size; /* size of plane in bytes, align on page*/ > > > > > > > + __u32 x_pos; /* horizontal position of cursor plane, upper > > left corner > > > > > > in pixels */ > > > > > > > + __u32 y_pos; /* vertical position of cursor plane, upper left > > corner in > > > > > > lines*/ > > > > > > > + __u32 region_index; > > > > > > > + __s32 fd; /* dma-buf fd */ > > > > > > > > > > > > How do I know which of these is valid, region_index or fd? > > > > > > Can I ask for one vs the other? What are the errno values to > > > > > > differentiate unsupported vs not initialized? Is there a "probe" > > > > > > flag that I can use to determine what the device supports > > > > > > without allocating > > > > those resources yet? > > > > > Dma-buf won't use region_index, which means region_index is zero > > > > > all the > > > > time for dma-buf usage. > > > > > As we discussed, there won't be errno if not initialized, just > > > > > keep all fields > > zero. > > > > > I will add the comments about these in the next version. Thanks > > > > > > > > Zero is a valid region index. > > > If zero is valid, can we find out other invalid value? How about 0xffffffff? > > > > Unlikely, but also valid. Isn't this why we have a flags field in the > > structure, so we don't need to rely on implicit values as invalid. > > Also, all of the previously discussed usage models needs to be > > documented, either here in the header or in a Documentation/ file. > According to the previously discussion, we also have the following propose: > 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; > }; > So, we may need to add one more ioctl, e.g. VFIO_DEVICE_QUERY_GFX_CAPS. > User mode can query this before querying the plan info, and to see which usage > (dma-buf or region) is supported. > Does it still make sense? > Thanks. So, I think we can rely on VFIO_DEVICE_GET_REGION_INFO to tell user mode whether the region case is using, instead of introducing a new ioctl. Thanks Tina > > Tina > > > > Thanks, > > > > Alex > > _______________________________________________ > > dri-devel mailing list > > dri-devel@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel