Re: [PATCH] drm/qxl: drop prime import/export callbacks

From: David Airlie
Date: Tue Apr 09 2019 - 02:06:35 EST


On Tue, Apr 9, 2019 at 4:03 PM Gerd Hoffmann <kraxel@xxxxxxxxxx> wrote:
>
> On Tue, Apr 09, 2019 at 02:01:33PM +1000, Dave Airlie wrote:
> > On Sat, 12 Jan 2019 at 07:13, Dave Airlie <airlied@xxxxxxxxx> wrote:
> > >
> > > On Thu, 10 Jan 2019 at 18:17, Gerd Hoffmann <kraxel@xxxxxxxxxx> wrote:
> > > >
> > > > Also set prime_handle_to_fd and prime_fd_to_handle to NULL,
> > > > so drm will not advertive DRM_PRIME_CAP_{IMPORT,EXPORT} to
> > > > userspace.
> >
> > It's been pointed out to me that disables DRI3 for these devices, I'm
> > not sure that is the solution we actually wanted.
> >
> > any ideas?
>
> Well. Lets have a look at where we stand:
>
> * drm_gem_prime_export() works with qxl, you'll get a dma-buf handle.
>
> * Other drivers trying to map that dma-buf (drm_gem_map_dma_buf()
> callback) will not work, due to the ->gem_prime_get_sg_table()
> callback not being there.
>
> * drm_gem_prime_import() will work with buffers from the same qxl
> device, there is a shortcut for this special case. Otherwise it
> will not work, due to the ->gem_prime_import_sg_table() callback
> not being there.
>
> Bottom line: you can use prime to pass qxl object handles from one
> application to another. But you can't actually export/import qxl
> buffer objects from/to other devices.
>
> Problem is that we have no way to signal to userspace that prime can
> be used that way.
>
> Setting DRM_PRIME_CAP_{IMPORT,EXPORT} even though the driver can't
> do that leads to other problems. Userspace thinks it can have other
> devices (intel vgpu for example) handle the rendering, then import
> the rendered buffer into qxl for scanout.
>
> Should we add something like DRM_PRIME_CAP_SAME_DEVICE?

Yeah I expect we need some sort of same device only capability, so
that dri3 userspace can work.

If we just fail importing in these cases what happens? userspace just
gets confused, I know we used to print a backtrace if we hit the mmap
path, but if we didn't do that what happens?

Dave.