From b052adca7c60bb69d18f4cdf6b2fd9006dc66501 Mon Sep 17 00:00:00 2001 From: Chaudhary Amit Kumar Date: Thu, 18 Oct 2018 18:36:32 +0530 Subject: [PATCH 1377/4131] drm/amdgpu: separate BO from GEM object This allows us to have multiple GEM objects for one BO. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I0cb30db4177ddcb18cb7ff294c220e700c9a26bc Signed-off-by: Christian König Signed-off-by: Chaudhary Amit Kumar --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 9 ++++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 4 +++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 5323609..c876ad5 100755 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -383,7 +383,14 @@ struct amdgpu_clock { */ #define AMDGPU_GEM_DOMAIN_MAX 0x3 -#define gem_to_amdgpu_bo(gobj) container_of((gobj), struct amdgpu_bo, gem_base) + +struct amdgpu_gem_object { + struct drm_gem_object base; + struct list_head list; + struct amdgpu_bo *bo; +}; + +#define gem_to_amdgpu_bo(gobj) container_of((gobj), struct amdgpu_gem_object, base)->bo void amdgpu_gem_object_free(struct drm_gem_object *obj); int amdgpu_gem_object_open(struct drm_gem_object *obj, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 19631d0..3ba09ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -98,6 +98,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size, } return r; } + robj->pid = task_pid_nr(current); gobj = kzalloc(sizeof(struct amdgpu_gem_object), GFP_KERNEL); if (unlikely(!gobj)) { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index fb6c3d6..7ed9e8b 100755 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -47,7 +47,6 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo) if (bo->tbo.mem.mem_type == AMDGPU_PL_DGMA_IMPORT) kfree(tbo->mem.bus.addr); amdgpu_bo_kunmap(bo); - drm_gem_object_release(&bo->gem_base); if (bo->gem_base.import_attach) drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg); @@ -368,6 +367,7 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev, } INIT_LIST_HEAD(&bo->shadow_list); INIT_LIST_HEAD(&bo->va); + INIT_LIST_HEAD(&bo->gem_objects); bo->preferred_domains = domain & (AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT | AMDGPU_GEM_DOMAIN_CPU | diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h index 024e5cb..b5595eb 100755 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h @@ -72,10 +72,12 @@ struct amdgpu_bo { void *metadata; u32 metadata_size; unsigned prime_shared_count; + /* GEM objects refereing to this BO */ + struct list_head gem_objects; + /* list of all virtual address to which this bo is associated to */ struct list_head va; /* Constant after initialization */ - struct drm_gem_object gem_base; struct amdgpu_bo *parent; struct amdgpu_bo *shadow; -- 2.7.4