mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
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. Cc: Inki Dae <inki.dae@samsung.com> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
2bc7b0ca8c
commit
c1d6798d20
4 changed files with 5 additions and 35 deletions
|
@ -192,7 +192,7 @@ static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
|
||||||
/* nothing to be done here */
|
/* 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;
|
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);
|
drm_gem_object_unreference_unlocked(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(drm_gem_dmabuf_release);
|
||||||
|
|
||||||
static void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf)
|
static void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf)
|
||||||
{
|
{
|
||||||
|
|
|
@ -127,27 +127,6 @@ static void exynos_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
|
||||||
/* Nothing to do. */
|
/* 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,
|
static void *exynos_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf,
|
||||||
unsigned long page_num)
|
unsigned long page_num)
|
||||||
{
|
{
|
||||||
|
@ -193,7 +172,7 @@ static struct dma_buf_ops exynos_dmabuf_ops = {
|
||||||
.kunmap = exynos_gem_dmabuf_kunmap,
|
.kunmap = exynos_gem_dmabuf_kunmap,
|
||||||
.kunmap_atomic = exynos_gem_dmabuf_kunmap_atomic,
|
.kunmap_atomic = exynos_gem_dmabuf_kunmap_atomic,
|
||||||
.mmap = exynos_gem_dmabuf_mmap,
|
.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,
|
struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev,
|
||||||
|
|
|
@ -90,17 +90,6 @@ static void i915_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
|
||||||
kfree(sg);
|
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)
|
static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf)
|
||||||
{
|
{
|
||||||
struct drm_i915_gem_object *obj = dma_buf->priv;
|
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 = {
|
static const struct dma_buf_ops i915_dmabuf_ops = {
|
||||||
.map_dma_buf = i915_gem_map_dma_buf,
|
.map_dma_buf = i915_gem_map_dma_buf,
|
||||||
.unmap_dma_buf = i915_gem_unmap_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 = i915_gem_dmabuf_kmap,
|
||||||
.kmap_atomic = i915_gem_dmabuf_kmap_atomic,
|
.kmap_atomic = i915_gem_dmabuf_kmap_atomic,
|
||||||
.kunmap = i915_gem_dmabuf_kunmap,
|
.kunmap = i915_gem_dmabuf_kunmap,
|
||||||
|
|
|
@ -1478,6 +1478,7 @@ extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
|
||||||
struct dma_buf *dma_buf);
|
struct dma_buf *dma_buf);
|
||||||
extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
|
extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
|
||||||
struct drm_file *file_priv, int prime_fd, uint32_t *handle);
|
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,
|
extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
|
|
Loading…
Reference in a new issue