Message ID | 1493923548-20878-3-git-send-email-labbott@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, May 04, 2017 at 11:45:47AM -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 any available device structure. > > Signed-off-by: Laura Abbott <labbott@redhat.com> > --- > v4: Alternate implemntation to take an arbitrary struct dev instead of just > a platform device. > > This was different enough that I dropped the previous Reviewed-by > --- > drivers/gpu/drm/drm_prime.c | 30 ++++++++++++++++++++++++------ > include/drm/drm_prime.h | 5 +++++ > 2 files changed, 29 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 9fb65b7..5ad9a26 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -595,15 +595,18 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, > EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); > > /** > - * drm_gem_prime_import - helper library implementation of the import callback > + * drm_gem_prime_import_dev - core implementation of the import callback > * @dev: drm_device to import into > * @dma_buf: dma-buf object to import > + * @attach_dev: struct device to dma_buf attach > * > - * This is the implementation of the gem_prime_import functions for GEM drivers > - * using the PRIME helpers. > + * This is the core of drm_gem_prime_import. It's designed to be called by > + * drivers who want to use a different device structure than dev->dev for > + * attaching via dma_buf. > */ > -struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, > - struct dma_buf *dma_buf) > +struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, > + struct dma_buf *dma_buf, > + struct device *attach_dev) My critique would be that this should be called drm_gem_prime_import_for_device() Either way (though naturally I like my suggestion ;), Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> -Chris >
Hi Laura, [auto build test WARNING on drm/drm-next] [also build test WARNING on next-20170505] [cannot apply to v4.11] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Laura-Abbott/dma_buf-import-support-for-vgem/20170505-173856 base: git://people.freedesktop.org/~airlied/linux.git drm-next config: arm-at91_dt_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705 reproduce: wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=arm All warnings (new ones prefixed by >>): In file included from include/drm/drm_file.h:38:0, from drivers/gpu/drm/drm_file.c:38: >> include/drm/drm_prime.h:71:14: warning: 'struct device' declared inside parameter list will not be visible outside of this definition or declaration struct device *attach_dev); ^~~~~~ vim +71 include/drm/drm_prime.h 55 56 struct drm_device; 57 struct drm_gem_object; 58 struct drm_file; 59 60 struct dma_buf *drm_gem_prime_export(struct drm_device *dev, 61 struct drm_gem_object *obj, 62 int flags); 63 int drm_gem_prime_handle_to_fd(struct drm_device *dev, 64 struct drm_file *file_priv, uint32_t handle, uint32_t flags, 65 int *prime_fd); 66 struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, 67 struct dma_buf *dma_buf); 68 69 struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, 70 struct dma_buf *dma_buf, > 71 struct device *attach_dev); 72 73 int drm_gem_prime_fd_to_handle(struct drm_device *dev, 74 struct drm_file *file_priv, int prime_fd, uint32_t *handle); 75 struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev, 76 struct dma_buf_export_info *exp_info); 77 void drm_gem_dmabuf_release(struct dma_buf *dma_buf); 78 79 int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 9fb65b7..5ad9a26 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -595,15 +595,18 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); /** - * drm_gem_prime_import - helper library implementation of the import callback + * drm_gem_prime_import_dev - core implementation of the import callback * @dev: drm_device to import into * @dma_buf: dma-buf object to import + * @attach_dev: struct device to dma_buf attach * - * This is the implementation of the gem_prime_import functions for GEM drivers - * using the PRIME helpers. + * This is the core of drm_gem_prime_import. It's designed to be called by + * drivers who want to use a different device structure than dev->dev for + * attaching via dma_buf. */ -struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) +struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, + struct dma_buf *dma_buf, + struct device *attach_dev) { struct dma_buf_attachment *attach; struct sg_table *sgt; @@ -625,7 +628,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); @@ -655,6 +658,21 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, return ERR_PTR(ret); } +EXPORT_SYMBOL(drm_gem_prime_import_dev); + +/** + * drm_gem_prime_import - helper library implementation of the import callback + * @dev: drm_device to import into + * @dma_buf: dma-buf object to import + * + * 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) +{ + return drm_gem_prime_import_dev(dev, dma_buf, dev->dev); +} EXPORT_SYMBOL(drm_gem_prime_import); /** diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h index 0b2a235..46fd1fb 100644 --- a/include/drm/drm_prime.h +++ b/include/drm/drm_prime.h @@ -65,6 +65,11 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev, int *prime_fd); struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf); + +struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev, + struct dma_buf *dma_buf, + struct device *attach_dev); + 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,
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 any available device structure. Signed-off-by: Laura Abbott <labbott@redhat.com> --- v4: Alternate implemntation to take an arbitrary struct dev instead of just a platform device. This was different enough that I dropped the previous Reviewed-by --- drivers/gpu/drm/drm_prime.c | 30 ++++++++++++++++++++++++------ include/drm/drm_prime.h | 5 +++++ 2 files changed, 29 insertions(+), 6 deletions(-)