From: Alex Williamson <alex.williamson@redhat.com>
To: Kirti Wankhede <kwankhede@nvidia.com>
Cc: intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Gerd Hoffmann <kraxel@redhat.com>,
Xiaoguang Chen <xiaoguang.chen@intel.com>,
intel-gvt-dev@lists.freedesktop.org, zhiyuan.lv@intel.com
Subject: Re: [PATCH v9 5/7] vfio: Define vfio based dma-buf operations
Date: Fri, 16 Jun 2017 10:39:59 -0600 [thread overview]
Message-ID: <20170616103959.3b6f1681@t450s.home> (raw)
In-Reply-To: <24c4880b-24f5-ea07-834c-c77d3e895c78@nvidia.com>
On Fri, 16 Jun 2017 19:02:30 +0530
Kirti Wankhede <kwankhede@nvidia.com> wrote:
> On 6/16/2017 2:08 AM, Alex Williamson wrote:
> > On Thu, 15 Jun 2017 18:00:38 +0200
> > Gerd Hoffmann <kraxel@redhat.com> wrote:
> >
> >> Hi,
> >>
> >>>> +struct vfio_dmabuf_mgr_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 padding;
> >>>> +};
> >>>> +
> >>>
> >>> This structure is generic, can remove dmabuf from its name,
> >>> vfio_plane_info or vfio_vgpu_surface_info since this will only be
> >>> used
> >>> by vgpu.
> >>
> >> Agree.
> >
> > I'm not sure I agree regarding the vgpu statement, maybe this is not
> > dmabuf specific, but what makes it vgpu specific? We need to separate
> > our current usage plans from what it's actually describing and I don't
> > see that it describes anything vgpu specific.
> >
> >>>> +struct vfio_dmabuf_mgr_query_plane {
> >>>> + __u32 argsz;
> >>>> + __u32 flags;
> >>>> + struct vfio_dmabuf_mgr_plane_info plane_info;
> >>>> + __u32 plane_id;
> >>>> +};
> >>>> +
> >>>> +#define VFIO_DMABUF_MGR_QUERY_PLANE _IO(VFIO_TYPE, VFIO_BASE + 15)
> >>>> +
> >>>
> >>> This same interface can be used to query surface/plane information
> >>> for
> >>> both, dmabuf and region, case. Here also 'DMABUF' can be removed and
> >>> define flags if you want to differentiate query for 'dmabuf' and
> >>> 'region'.
> >>
> >> Hmm, any specific reason why you want use a ioctl for that? I would
> >> simply place a "struct vfio_dmabuf_mgr_plane_info" (or whatever the
> >> final name will be) at the start of the region.
> >
> > Right, these are ioctls on the dmabuf mgr fd, not the vfio device fd,
> > if you're exposing a region with the info I wouldn't think you'd want
> > the hassle of managing this separate fd when you could do something
> > like Gerd suggests with defining the first page of the regions as
> > containing the structure.
>
> My suggestion was to use vfio device fd for this ioctl and have dmabuf
> mgr fd as member in above query_plane structure, for region type it
> would be set to 0.
> Yes there is other way to query surface information as Gerd suggested,
> but my point is: if a ioctl is being add, it could be used for both
> types, dmabuf and region.
I think this suggests abandoning the dmabuf manager fd entirely. That's
not necessarily a bad thing, but I don't think the idea of the dmabuf
manager fd stands if we push one of its primary reasons for existing
back to the device fd. Reading though previous posts, I think we
embraced the dmabuf manager as a separate fd primarily for
consolidation and the potential to use it as a notification point, the
latter being only theoretically useful.
So perhaps this becomes:
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;
};
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;
};
The flag defines the data in the id field as either referring to a
region (perhaps there could be multiple regions with only one active)
or a plane ID, which is acquired separately, such as via a dmabuf fd.
This would be retrieved via an optional VFIO_DEVICE_QUERY_GFX_PLANE
ioctl on the vfio device, implemented in the vendor driver.
Would the above, along with the already defined mechanism for defining
device specific regions, account for NVIDIA's needs?
For dmabuf users, we'd still need a new ioctl to get the dmabuf fd. We
could either create a specific ioctl for this (ex.
VFIO_DEVICE_GET_DMABUF_FD) or we could create a shared, generic GET_FD
interface on the device.
> > Maybe you could even allow mmap of that page
> > to reduce the overhead of getting the current state.
>
> Can't mmap that page to get surface information. There is no way to
> synchronize between QEMU reading this mmapped region and vendor driver
> writing it. There could be race condition in these two operations. Read
> on this page should be trapped and blocking, so that surface in that
> region is only updated when its asked for.
>
> > For the sake of
> > userspace, I'd hope we'd still use the same structure for either the
> > ioctl or region mapping. I'm not really in favor of declaring that
> > this particular ioctl might exist on the device fd when such-and-such
> > region is present otherwise it might exist on a dmabuf manager fd.
>
> Userspace will always use vfio device fd for this ioctl, it only have to
> set proper arguments to its structure based on type.
Then we should kill off the manager fd unless there are arguments that
still give it value. Thanks,
Alex
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-06-16 16:39 UTC|newest]
Thread overview: 56+ 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 ` [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 ` [PATCH v9 3/7] drm: Extend the drm format Xiaoguang Chen
2017-06-15 10:21 ` Ville Syrjälä
2017-06-20 9:01 ` [Intel-gfx] " 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 ` [PATCH v9 5/7] vfio: Define vfio based dma-buf operations Xiaoguang Chen
2017-06-15 14:51 ` Kirti Wankhede
2017-06-15 16:00 ` Gerd Hoffmann
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 16:39 ` Alex Williamson [this message]
2017-06-16 18:28 ` Kirti Wankhede
2017-06-19 6:34 ` Gerd Hoffmann
2017-06-19 14:54 ` Alex Williamson
2017-06-20 8:35 ` Gerd Hoffmann
2017-06-20 13:55 ` Kirti Wankhede
2017-06-21 7:22 ` Gerd Hoffmann
2017-07-12 13:18 ` Kirti Wankhede
2017-07-14 9:58 ` Gerd Hoffmann
2017-06-19 6:38 ` Gerd Hoffmann
2017-06-19 14:55 ` Alex Williamson
2017-06-20 8:41 ` Zhang, Tina
2017-06-20 10:57 ` Gerd Hoffmann
2017-06-20 15:00 ` [Intel-gfx] " Alex Williamson
2017-06-20 17:07 ` Kirti Wankhede
2017-06-20 23:01 ` Zhang, Tina
2017-06-20 23:22 ` Alex Williamson
2017-06-21 9:20 ` Zhang, Tina
2017-06-21 11:03 ` [Intel-gfx] " Gerd Hoffmann
2017-06-21 18:59 ` Alex Williamson
2017-06-22 8:30 ` Gerd Hoffmann
2017-06-22 18:54 ` Alex Williamson
2017-06-23 7:26 ` Gerd Hoffmann
2017-06-23 7:49 ` [Intel-gfx] " Zhi Wang
2017-06-23 8:31 ` Gerd Hoffmann
2017-06-23 16:40 ` Alex Williamson
2017-06-23 17:15 ` Alex Williamson
2017-06-26 6:17 ` Gerd Hoffmann
2017-06-22 0:21 ` Zhang, Tina
2017-06-21 7:34 ` Gerd Hoffmann
2017-06-23 21:58 ` Zhang, Tina
2017-06-26 6:39 ` Gerd Hoffmann
2017-06-26 17:28 ` Alex Williamson
2017-06-27 6:12 ` Gerd Hoffmann
2017-06-28 12:48 ` Zhang, Tina
2017-06-29 6:41 ` Gerd Hoffmann
2017-06-29 8:39 ` Daniel Vetter
2017-07-04 0:47 ` Zhang, Tina
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 ` [PATCH v9 7/7] drm/i915/gvt: Adding user interface for dma-buf 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=20170616103959.3b6f1681@t450s.home \
--to=alex.williamson@redhat.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=kraxel@redhat.com \
--cc=kwankhede@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=xiaoguang.chen@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).