> -----Original Message----- > From: Daniel Vetter [mailto:daniel.vetter@xxxxxxxx] > Sent: Wednesday, August 07, 2013 6:15 PM > To: DRI Development > Cc: Intel Graphics Development; Daniel Vetter; Inki Dae > Subject: [PATCH 1/3] drm: use common drm_gem_dmabuf_release in i915/exynos > drivers > > Note that this is slightly tricky since both drivers store their > native objects in dma_buf->priv. But both also embed the base > drm_gem_object at the first position, so the implicit cast is ok. > > To use the release helper we need to export it, too. Yeah, may I repost this patch with additional work? We also need to export with a gem object instead of specific one like you did. Thanks, Inki Dae > > Cc: Inki Dae <inki.dae@xxxxxxxxxxx> > Cc: Intel Graphics Development <intel-gfx@xxxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/drm_prime.c | 3 ++- > drivers/gpu/drm/exynos/exynos_drm_dmabuf.c | 23 +---------------------- > drivers/gpu/drm/i915/i915_gem_dmabuf.c | 13 +------------ > include/drm/drmP.h | 1 + > 4 files changed, 5 insertions(+), 35 deletions(-) > > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 85e450e..a35f206 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -192,7 +192,7 @@ static void drm_gem_unmap_dma_buf(struct > dma_buf_attachment *attach, > /* nothing to be done here */ > } > > -static void drm_gem_dmabuf_release(struct dma_buf *dma_buf) > +void drm_gem_dmabuf_release(struct dma_buf *dma_buf) > { > struct drm_gem_object *obj = dma_buf->priv; > > @@ -202,6 +202,7 @@ static void drm_gem_dmabuf_release(struct dma_buf > *dma_buf) > drm_gem_object_unreference_unlocked(obj); > } > } > +EXPORT_SYMBOL(drm_gem_dmabuf_release); > > static void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf) > { > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > index a0f997e..3cd56e1 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > @@ -127,27 +127,6 @@ static void exynos_gem_unmap_dma_buf(struct > dma_buf_attachment *attach, > /* Nothing to do. */ > } > > -static void exynos_dmabuf_release(struct dma_buf *dmabuf) > -{ > - struct exynos_drm_gem_obj *exynos_gem_obj = dmabuf->priv; > - > - /* > - * exynos_dmabuf_release() call means that file object's > - * f_count is 0 and it calls drm_gem_object_handle_unreference() > - * to drop the references that these values had been increased > - * at drm_prime_handle_to_fd() > - */ > - if (exynos_gem_obj->base.export_dma_buf == dmabuf) { > - exynos_gem_obj->base.export_dma_buf = NULL; > - > - /* > - * drop this gem object refcount to release allocated buffer > - * and resources. > - */ > - drm_gem_object_unreference_unlocked(&exynos_gem_obj->base); > - } > -} > - > static void *exynos_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, > unsigned long page_num) > { > @@ -193,7 +172,7 @@ static struct dma_buf_ops exynos_dmabuf_ops = { > .kunmap = exynos_gem_dmabuf_kunmap, > .kunmap_atomic = exynos_gem_dmabuf_kunmap_atomic, > .mmap = exynos_gem_dmabuf_mmap, > - .release = exynos_dmabuf_release, > + .release = drm_gem_dmabuf_release, > }; > > struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev, > diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c > b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > index f2e185c..63ee1a9 100644 > --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c > +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > @@ -90,17 +90,6 @@ static void i915_gem_unmap_dma_buf(struct > dma_buf_attachment *attachment, > kfree(sg); > } > > -static void i915_gem_dmabuf_release(struct dma_buf *dma_buf) > -{ > - struct drm_i915_gem_object *obj = dma_buf->priv; > - > - if (obj->base.export_dma_buf == dma_buf) { > - /* drop the reference on the export fd holds */ > - obj->base.export_dma_buf = NULL; > - drm_gem_object_unreference_unlocked(&obj->base); > - } > -} > - > static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf) > { > struct drm_i915_gem_object *obj = dma_buf->priv; > @@ -211,7 +200,7 @@ static int i915_gem_begin_cpu_access(struct dma_buf > *dma_buf, size_t start, size > static const struct dma_buf_ops i915_dmabuf_ops = { > .map_dma_buf = i915_gem_map_dma_buf, > .unmap_dma_buf = i915_gem_unmap_dma_buf, > - .release = i915_gem_dmabuf_release, > + .release = drm_gem_dmabuf_release, > .kmap = i915_gem_dmabuf_kmap, > .kmap_atomic = i915_gem_dmabuf_kmap_atomic, > .kunmap = i915_gem_dmabuf_kunmap, > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index 4b518e0..cc991a2 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -1537,6 +1537,7 @@ 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, > struct drm_file *file_priv, int prime_fd, uint32_t *handle); > +extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf); > > extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void > *data, > struct drm_file *file_priv); > -- > 1.8.3.2 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel