Message ID | 1499837367-8368-2-git-send-email-Felix.Kuehling@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Am 12.07.2017 um 07:29 schrieb Felix Kuehling: > Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/drm_prime.c | 25 +++++++++++++++++++++++++ > include/drm/drmP.h | 2 ++ > 2 files changed, 27 insertions(+) > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 25aa455..b1f8445 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -594,6 +594,31 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, > EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); > > /** > + * drm_gem_prime_dmabuf_to_object - try to cast dmabuf to GEM object > + * @dma_buf: dma-buf object to cast > + * @driver: driver that is the expected exporter of the dma-buf > + * > + * If @dma_buf represents a GEM object, this function return a pointer > + * to it. Optionally, if @driver is not NULL, it also checks that the > + * object was exported by @driver. Otherwise it returns NULL. > + */ > +struct drm_gem_object *drm_gem_prime_dmabuf_to_object(struct dma_buf *dma_buf, > + struct drm_driver *driver) > +{ > + struct drm_gem_object *obj; > + > + if (dma_buf->ops != &drm_gem_prime_dmabuf_ops) > + return NULL; > + > + obj = dma_buf->priv; > + if (driver && obj->dev->driver != driver) > + return NULL; > + > + return obj; > +} > +EXPORT_SYMBOL(drm_gem_prime_dmabuf_to_object); > + > +/** > * drm_gem_prime_import - helper library implementation of the import callback > * @dev: drm_device to import into > * @dma_buf: dma-buf object to import > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 6105c05..79c2b23 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -767,6 +767,8 @@ extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev, > extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, > struct drm_file *file_priv, uint32_t handle, uint32_t flags, > int *prime_fd); > +extern struct drm_gem_object *drm_gem_prime_dmabuf_to_object( > + struct dma_buf *dma_buf, struct drm_driver *driver); > extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, > struct dma_buf *dma_buf); > extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
On Wed, Jul 12, 2017 at 01:29:22AM -0400, Felix Kuehling wrote: > Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> > --- > drivers/gpu/drm/drm_prime.c | 25 +++++++++++++++++++++++++ > include/drm/drmP.h | 2 ++ > 2 files changed, 27 insertions(+) > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 25aa455..b1f8445 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -594,6 +594,31 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, > EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); > > /** > + * drm_gem_prime_dmabuf_to_object - try to cast dmabuf to GEM object > + * @dma_buf: dma-buf object to cast > + * @driver: driver that is the expected exporter of the dma-buf > + * > + * If @dma_buf represents a GEM object, this function return a pointer > + * to it. Optionally, if @driver is not NULL, it also checks that the > + * object was exported by @driver. Otherwise it returns NULL. > + */ > +struct drm_gem_object *drm_gem_prime_dmabuf_to_object(struct dma_buf *dma_buf, > + struct drm_driver *driver) > +{ > + struct drm_gem_object *obj; > + > + if (dma_buf->ops != &drm_gem_prime_dmabuf_ops) > + return NULL; > + > + obj = dma_buf->priv; > + if (driver && obj->dev->driver != driver) > + return NULL; > + > + return obj; > +} > +EXPORT_SYMBOL(drm_gem_prime_dmabuf_to_object); Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Bonus points bikeshed: Would be sweet to use that helper in drm_prime.c itself, and iirc some drivers could use it too. -Daniel > + > +/** > * drm_gem_prime_import - helper library implementation of the import callback > * @dev: drm_device to import into > * @dma_buf: dma-buf object to import > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 6105c05..79c2b23 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -767,6 +767,8 @@ extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev, > extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, > struct drm_file *file_priv, uint32_t handle, uint32_t flags, > int *prime_fd); > +extern struct drm_gem_object *drm_gem_prime_dmabuf_to_object( > + struct dma_buf *dma_buf, struct drm_driver *driver); > extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, > struct dma_buf *dma_buf); > extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, > -- > 1.9.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 25aa455..b1f8445 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -594,6 +594,31 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); /** + * drm_gem_prime_dmabuf_to_object - try to cast dmabuf to GEM object + * @dma_buf: dma-buf object to cast + * @driver: driver that is the expected exporter of the dma-buf + * + * If @dma_buf represents a GEM object, this function return a pointer + * to it. Optionally, if @driver is not NULL, it also checks that the + * object was exported by @driver. Otherwise it returns NULL. + */ +struct drm_gem_object *drm_gem_prime_dmabuf_to_object(struct dma_buf *dma_buf, + struct drm_driver *driver) +{ + struct drm_gem_object *obj; + + if (dma_buf->ops != &drm_gem_prime_dmabuf_ops) + return NULL; + + obj = dma_buf->priv; + if (driver && obj->dev->driver != driver) + return NULL; + + return obj; +} +EXPORT_SYMBOL(drm_gem_prime_dmabuf_to_object); + +/** * drm_gem_prime_import - helper library implementation of the import callback * @dev: drm_device to import into * @dma_buf: dma-buf object to import diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 6105c05..79c2b23 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -767,6 +767,8 @@ extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev, extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); +extern struct drm_gem_object *drm_gem_prime_dmabuf_to_object( + struct dma_buf *dma_buf, struct drm_driver *driver); extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf); extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> --- drivers/gpu/drm/drm_prime.c | 25 +++++++++++++++++++++++++ include/drm/drmP.h | 2 ++ 2 files changed, 27 insertions(+)