aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch
new file mode 100644
index 00000000..3eb2036c
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1377-drm-amdgpu-separate-BO-from-GEM-object.patch
@@ -0,0 +1,92 @@
+From b052adca7c60bb69d18f4cdf6b2fd9006dc66501 Mon Sep 17 00:00:00 2001
+From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
+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 <christian.koenig@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
+---
+ 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
+