diff mbox

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

Message ID 1493241150-21742-3-git-send-email-labbott@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Laura Abbott April 26, 2017, 9:12 p.m. UTC
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@redhat.com>
---
New approach for v2
---
 drivers/gpu/drm/drm_prime.c | 23 ++++++++++++++++++++---
 include/drm/drmP.h          |  5 +++++
 2 files changed, 25 insertions(+), 3 deletions(-)

Comments

Daniel Vetter May 2, 2017, 9:19 a.m. UTC | #1
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@redhat.com>
> ---
> 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
>
diff mbox

Patch

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,