Re: [RFC PATCHv2 2/3] drm/prime: Introduce drm_gem_prime_import_platform

From: Daniel Vetter
Date: Tue May 02 2017 - 05:19:34 EST


On Wed, Apr 26, 2017 at 02:12:29PM -0700, Laura Abbott wrote:
> The existing drm_gem_prime_import function uses the underlying
> struct device of a drm_device for attaching to a dma_buf. Some drivers
> (notably vgem) may not have an underlying device structure. Offer
> an alternate function to attach using a platform device associated
> with drm_device.
>
> Signed-off-by: Laura Abbott <labbott@xxxxxxxxxx>
> ---
> New approach for v2

This conflicts with patches already in drm-misc.git/drm-misc-next. Can you
pls rebase (and then also pls add the missing kerneldoc for the new
drm_gem_prime_import_platform function, plus links between the two any
why they exists/when to use each)?

Noticed this when I tried to apply them.

Pls keep Chris' r-b on the patch when resending.

Thanks, Daniel
> ---
> drivers/gpu/drm/drm_prime.c | 23 ++++++++++++++++++++---
> include/drm/drmP.h | 5 +++++
> 2 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> index 25aa455..5486248 100644
> --- a/drivers/gpu/drm/drm_prime.c
> +++ b/drivers/gpu/drm/drm_prime.c
> @@ -601,8 +601,9 @@ EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
> * This is the implementation of the gem_prime_import functions for GEM drivers
> * using the PRIME helpers.
> */
> -struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
> - struct dma_buf *dma_buf)
> +static struct drm_gem_object *__drm_gem_prime_import(struct drm_device *dev,
> + struct dma_buf *dma_buf,
> + struct device *attach_dev)
> {
> struct dma_buf_attachment *attach;
> struct sg_table *sgt;
> @@ -624,7 +625,7 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
> if (!dev->driver->gem_prime_import_sg_table)
> return ERR_PTR(-EINVAL);
>
> - attach = dma_buf_attach(dma_buf, dev->dev);
> + attach = dma_buf_attach(dma_buf, attach_dev);
> if (IS_ERR(attach))
> return ERR_CAST(attach);
>
> @@ -654,8 +655,24 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
>
> return ERR_PTR(ret);
> }
> +
> +struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
> + struct dma_buf *dma_buf)
> +{
> + return __drm_gem_prime_import(dev, dma_buf, dev->dev);
> +}
> EXPORT_SYMBOL(drm_gem_prime_import);
>
> +struct drm_gem_object *drm_gem_prime_import_platform(struct drm_device *dev,
> + struct dma_buf *dma_buf)
> +{
> + if (WARN_ON_ONCE(!dev->platformdev))
> + return NULL;
> +
> + return __drm_gem_prime_import(dev, dma_buf, &dev->platformdev->dev);
> +}
> +EXPORT_SYMBOL(drm_gem_prime_import_platform);
> +
> /**
> * drm_gem_prime_fd_to_handle - PRIME import function for GEM drivers
> * @dev: dev to export the buffer from
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 6105c05..f4ac30f 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -769,6 +769,11 @@ extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
> int *prime_fd);
> extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
> struct dma_buf *dma_buf);
> +
> +extern struct drm_gem_object *drm_gem_prime_import_platform(
> + struct drm_device *dev,
> + struct dma_buf *dma_buf);
> +
> extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
> struct drm_file *file_priv, int prime_fd, uint32_t *handle);
> struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
> --
> 2.7.4
>

--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch