[PATCH v3 1/2] drm/gem: drm_gem_dumb_map_offset(): reject dma-buf

Daniel Vetter daniel at ffwll.ch
Fri Aug 18 07:45:48 UTC 2017


On Fri, Aug 18, 2017 at 01:35:41AM +0300, Laurent Pinchart wrote:
> Hi Chris,
> 
> On Thursday 17 Aug 2017 21:01:54 Chris Wilson wrote:
> > Quoting Laurent Pinchart (2017-08-17 20:40:52)
> > > On Thursday 17 Aug 2017 20:09:20 Chris Wilson wrote:
> > >> Quoting Laurent Pinchart (2017-08-17 20:01:40)
> > >>> On Thursday 17 Aug 2017 19:30:44 Chris Wilson wrote:
> > >>>> Quoting Laurent Pinchart (2017-08-17 18:56:09)
> > >>>>> On Thursday 17 Aug 2017 18:21:30 Noralf Trønnes wrote:
> > >>>>>> Reject mapping an imported dma-buf since is's an invalid
> > >>>>>> use-case.
> > >>>>>> 
> > >>>>>> Cc: Philipp Zabel <p.zabel at pengutronix.de>
> > >>>>>> Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > >>>>>> Cc: Sean Paul <seanpaul at chromium.org>
> > >>>>>> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> > >>>>>> Signed-off-by: Noralf Trønnes <noralf at tronnes.org>
> > >>>>>> ---
> > >>>>>> 
> > >>>>>>  drivers/gpu/drm/drm_gem.c | 6 ++++++
> > >>>>>>  1 file changed, 6 insertions(+)
> > >>>>>> 
> > >>>>>> diff --git a/drivers/gpu/drm/drm_gem.c
> > >>>>>> b/drivers/gpu/drm/drm_gem.c
> > >>>>>> index ad4e9cf..8da5801 100644
> > >>>>>> --- a/drivers/gpu/drm/drm_gem.c
> > >>>>>> +++ b/drivers/gpu/drm/drm_gem.c
> > >>>>>> @@ -333,6 +333,12 @@ int drm_gem_dumb_map_offset(struct drm_file
> > >>>>>> *file, struct drm_device *dev,
> > >>>>>>  	if (!obj)
> > >>>>>>               return -ENOENT;
> > >>>>>> 
> > >>>>>> +     /* Don't allow imported objects to be mapped */
> > >>>>>> +     if (obj->import_attach) {
> > >>>>>> +             ret = -EINVAL;
> > >>>>>> +             goto out;
> > >>>>>> +     }
> > >>>>>> +
> > >>>>> 
> > >>>>> Wouldn't it be better to move this check to
> > >>>>> drm_gem_create_mmap_offset_size() to reject mapping of all
> > >>>>> imported dmabuf, not just the ones associated with dumb buffers ?
> > >>>> 
> > >>>> No, we use that and we don't ban mapping an imported object.
> > >>> 
> > >>> Do you use that with driver-specific buffers only or with dumb buffers
> > >>> too ?
> > >> 
> > >> For dma-buf we import? The current presumption is that the sg_table is
> > >> backed by struct page. How would we know otherwise? I am actually not
> > >> sure what would happen if we tried to use another mmio bar from the GPU.
> > >> 
> > >> For dumb buffers we create, they are just ordinary buffers.
> > > 
> > > My question was whether you need to mmap the dma-buf you import through
> > > the dumb buffers API (which this patch prevents for drivers using the GEM
> > > dumb helpers), or only through your driver-specific buffer API.
> > 
> > i915_gem_mmap_gtt_ioctl -> drm_gem_create_mmap_offset/_size
> > drvier->dumb_map_offset also uses the i915_gem_mmap_gtt mechanism.
> > 
> > I was responding to the suggestion that this check could be centralised in
> > drm_gem_create_mmap_offset_size, as that would prevent us from offering
> > the mmap interface on imported buffers.
> 
> Fair enough. I wonder, however, why mmap()ing an imported buffer through the 
> dumb buffers API is an invalid use case, while doing the same through the 
> driver-specific buffer API isn't.

Because i915 is special. Our offset-based mmap goes throug the gart, and
for that all we need is to dma-map the sg table, which is the primary
use-case for dma-buf. Which means we can always do that. But yeah it's
special.

In general dma-buf mmap on imported stuff isn't really a good idea, if you
want that, use the mmap on the dma-buf itself.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list