Commit 0d16d299 authored by Christopher James Halse Rogers's avatar Christopher James Halse Rogers Committed by Alex Deucher

drm/radeon: Maintain prime import/export refcount for BOs

Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarChristopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 803d89ad
...@@ -499,6 +499,7 @@ struct radeon_bo { ...@@ -499,6 +499,7 @@ struct radeon_bo {
u32 tiling_flags; u32 tiling_flags;
u32 pitch; u32 pitch;
int surface_reg; int surface_reg;
unsigned prime_shared_count;
/* list of all virtual address to which this bo /* list of all virtual address to which this bo
* is associated to * is associated to
*/ */
......
...@@ -77,6 +77,7 @@ struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, ...@@ -77,6 +77,7 @@ struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev,
list_add_tail(&bo->list, &rdev->gem.objects); list_add_tail(&bo->list, &rdev->gem.objects);
mutex_unlock(&rdev->gem.mutex); mutex_unlock(&rdev->gem.mutex);
bo->prime_shared_count = 1;
return &bo->gem_base; return &bo->gem_base;
} }
...@@ -91,6 +92,9 @@ int radeon_gem_prime_pin(struct drm_gem_object *obj) ...@@ -91,6 +92,9 @@ int radeon_gem_prime_pin(struct drm_gem_object *obj)
/* pin buffer into GTT */ /* pin buffer into GTT */
ret = radeon_bo_pin(bo, RADEON_GEM_DOMAIN_GTT, NULL); ret = radeon_bo_pin(bo, RADEON_GEM_DOMAIN_GTT, NULL);
if (likely(ret == 0))
bo->prime_shared_count++;
radeon_bo_unreserve(bo); radeon_bo_unreserve(bo);
return ret; return ret;
} }
...@@ -105,6 +109,8 @@ void radeon_gem_prime_unpin(struct drm_gem_object *obj) ...@@ -105,6 +109,8 @@ void radeon_gem_prime_unpin(struct drm_gem_object *obj)
return; return;
radeon_bo_unpin(bo); radeon_bo_unpin(bo);
if (bo->prime_shared_count)
bo->prime_shared_count--;
radeon_bo_unreserve(bo); radeon_bo_unreserve(bo);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment