aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch348
1 files changed, 0 insertions, 348 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch
deleted file mode 100644
index 39293ddb..00000000
--- a/meta-amdfalconx86/recipes-kernel/linux/files/0222-drm-amdgpu-keep-the-prefered-allowed-domains-in-the-.patch
+++ /dev/null
@@ -1,348 +0,0 @@
-From 9e3086daf194226378bd489d9089328d3cf3cbc9 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Fri, 18 Dec 2015 22:13:12 +0100
-Subject: [PATCH 0222/1110] drm/amdgpu: keep the prefered/allowed domains in
- the BO
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Stop copying that to the bo list entry, it doesn't change anyway.
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 6 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 14 ++---
- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 86 ++++++++++++++++++++++-------
- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 14 +++--
- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 15 +++--
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 --
- 6 files changed, 91 insertions(+), 48 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index b7b5d2e..d5e4503 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -445,8 +445,6 @@ struct amdgpu_bo_list_entry {
- struct amdgpu_bo *robj;
- struct ttm_validate_buffer tv;
- struct amdgpu_bo_va *bo_va;
-- unsigned prefered_domains;
-- unsigned allowed_domains;
- uint32_t priority;
- };
-
-@@ -484,6 +482,8 @@ struct amdgpu_bo {
- struct list_head list;
- /* Protected by tbo.reserved */
- u32 initial_domain;
-+ u32 prefered_domains;
-+ u32 allowed_domains;
- struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
- struct ttm_placement placement;
- struct ttm_buffer_object tbo;
-@@ -1064,8 +1064,6 @@ struct amdgpu_bo_list {
-
- struct amdgpu_bo_list *
- amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id);
--void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list,
-- struct list_head *validated);
- void amdgpu_bo_list_put(struct amdgpu_bo_list *list);
- void amdgpu_bo_list_free(struct amdgpu_bo_list *list);
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-index 9da4bd0..1c6c0ac 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-@@ -111,23 +111,17 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
- drm_gem_object_unreference_unlocked(gobj);
- entry->priority = min(info[i].bo_priority,
- AMDGPU_BO_LIST_MAX_PRIORITY);
-- entry->prefered_domains = entry->robj->initial_domain;
-- entry->allowed_domains = entry->prefered_domains;
-- if (entry->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
-- entry->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
-- if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm)) {
-+ if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm))
- has_userptr = true;
-- entry->prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
-- entry->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
- }
- entry->tv.bo = &entry->robj->tbo;
- entry->tv.shared = true;
-
-- if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GDS)
-+ if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GDS)
- gds_obj = entry->robj;
-- if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GWS)
-+ if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GWS)
- gws_obj = entry->robj;
-- if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_OA)
-+ if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_OA)
- oa_obj = entry->robj;
-
- trace_amdgpu_bo_list_set(list, entry->robj);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-index 76ec99d..dba4bad 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-@@ -30,6 +30,47 @@
- #include "amdgpu.h"
- #include "amdgpu_trace.h"
-
-+#define AMDGPU_CS_MAX_PRIORITY 32u
-+#define AMDGPU_CS_NUM_BUCKETS (AMDGPU_CS_MAX_PRIORITY + 1)
-+
-+/* This is based on the bucket sort with O(n) time complexity.
-+ * An item with priority "i" is added to bucket[i]. The lists are then
-+ * concatenated in descending order.
-+ */
-+struct amdgpu_cs_buckets {
-+ struct list_head bucket[AMDGPU_CS_NUM_BUCKETS];
-+};
-+
-+static void amdgpu_cs_buckets_init(struct amdgpu_cs_buckets *b)
-+{
-+ unsigned i;
-+
-+ for (i = 0; i < AMDGPU_CS_NUM_BUCKETS; i++)
-+ INIT_LIST_HEAD(&b->bucket[i]);
-+}
-+
-+static void amdgpu_cs_buckets_add(struct amdgpu_cs_buckets *b,
-+ struct list_head *item, unsigned priority)
-+{
-+ /* Since buffers which appear sooner in the relocation list are
-+ * likely to be used more often than buffers which appear later
-+ * in the list, the sort mustn't change the ordering of buffers
-+ * with the same priority, i.e. it must be stable.
-+ */
-+ list_add_tail(item, &b->bucket[min(priority, AMDGPU_CS_MAX_PRIORITY)]);
-+}
-+
-+static void amdgpu_cs_buckets_get_list(struct amdgpu_cs_buckets *b,
-+ struct list_head *out_list)
-+{
-+ unsigned i;
-+
-+ /* Connect the sorted buckets in the output list. */
-+ for (i = 0; i < AMDGPU_CS_NUM_BUCKETS; i++) {
-+ list_splice(&b->bucket[i], out_list);
-+ }
-+}
-+
- int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type,
- u32 ip_instance, u32 ring,
- struct amdgpu_ring **out_ring)
-@@ -107,8 +148,6 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,
- }
-
- p->uf_entry.robj = amdgpu_bo_ref(p->uf.bo);
-- p->uf_entry.prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
-- p->uf_entry.allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
- p->uf_entry.priority = 0;
- p->uf_entry.tv.bo = &p->uf_entry.robj->tbo;
- p->uf_entry.tv.shared = true;
-@@ -139,13 +178,16 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
- ret = -EINVAL;
- goto free_chunk;
- }
-+
-+ p->bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle);
-
- /* get chunks */
-+ INIT_LIST_HEAD(&p->validated);
- chunk_array_user = (uint64_t __user *)(unsigned long)(cs->in.chunks);
- if (copy_from_user(chunk_array, chunk_array_user,
- sizeof(uint64_t)*cs->in.num_chunks)) {
- ret = -EFAULT;
-- goto put_ctx;
-+ goto put_bo_list;
- }
-
- p->nchunks = cs->in.num_chunks;
-@@ -153,7 +195,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
- GFP_KERNEL);
- if (!p->chunks) {
- ret = -ENOMEM;
-- goto put_ctx;
-+ goto put_bo_list;
- }
-
- for (i = 0; i < p->nchunks; i++) {
-@@ -229,7 +271,9 @@ free_partial_kdata:
- for (; i >= 0; i--)
- drm_free_large(p->chunks[i].kdata);
- kfree(p->chunks);
--put_ctx:
-+put_bo_list:
-+ if (p->bo_list)
-+ amdgpu_bo_list_put(p->bo_list);
- amdgpu_ctx_put(p->ctx);
- free_chunk:
- kfree(chunk_array);
-@@ -315,9 +359,9 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
- * completely.
- */
- if (p->bytes_moved <= p->bytes_moved_threshold)
-- domain = lobj->prefered_domains;
-+ domain = bo->prefered_domains;
- else
-- domain = lobj->allowed_domains;
-+ domain = bo->allowed_domains;
-
- retry:
- amdgpu_ttm_placement_from_domain(bo, domain);
-@@ -327,36 +371,38 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
- initial_bytes_moved;
-
- if (unlikely(r)) {
-- if (r != -ERESTARTSYS && domain != lobj->allowed_domains) {
-- domain = lobj->allowed_domains;
-- goto retry;
-+ if (r != -ERESTARTSYS && domain != bo->allowed_domains) {
-+ domain = bo->allowed_domains;
-
-+ goto retry;
- }
-+ return r;
- }
- }
- return 0;
- }
-
--static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
-- union drm_amdgpu_cs *cs)
-+static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p)
- {
-- struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
-+ struct amdgpu_cs_buckets buckets;
- struct list_head duplicates;
- bool need_mmap_lock = false;
-- int r;
--
-- INIT_LIST_HEAD(&p->validated);
-
-- p->bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle);
-+ int i, r;
-+
- if (p->bo_list) {
- need_mmap_lock = p->bo_list->has_userptr;
-- amdgpu_bo_list_get_list(p->bo_list, &p->validated);
-+ amdgpu_cs_buckets_init(&buckets);
-+ for (i = 0; i < p->bo_list->num_entries; i++)
-+ amdgpu_cs_buckets_add(&buckets, &p->bo_list->array[i].tv.head,
-+ p->bo_list->array[i].priority);
-+
-+ amdgpu_cs_buckets_get_list(&buckets, &p->validated);
- }
-
- INIT_LIST_HEAD(&duplicates);
- amdgpu_vm_get_pd_bo(&fpriv->vm, &p->validated, &p->vm_pd);
-
-- if (p->uf.bo)
- list_add(&p->uf_entry.tv.head, &p->validated);
-
- if (need_mmap_lock)
-@@ -774,7 +820,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
- r = amdgpu_cs_handle_lockup(adev, r);
- return r;
- }
-- r = amdgpu_cs_parser_bos(&parser, data);
-+ r = amdgpu_cs_parser_relocs(&parser);
- if (r == -ENOMEM)
- DRM_ERROR("Not enough memory for command submission!\n");
- else if (r && r != -ERESTARTSYS)
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-index cb34ff6..95e12f4 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-@@ -252,6 +252,8 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
- goto handle_lockup;
-
- bo = gem_to_amdgpu_bo(gobj);
-+ bo->prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
-+ bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
- r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags);
- if (r)
- goto release_object;
-@@ -629,7 +631,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
-
- info.bo_size = robj->gem_base.size;
- info.alignment = robj->tbo.mem.page_alignment << PAGE_SHIFT;
-- info.domains = robj->initial_domain;
-+ info.domains = robj->prefered_domains;
- info.domain_flags = robj->flags;
- amdgpu_bo_unreserve(robj);
- if (copy_to_user(out, &info, sizeof(info)))
-@@ -642,9 +644,13 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
- amdgpu_bo_unreserve(robj);
- break;
- }
-- robj->initial_domain = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
-- AMDGPU_GEM_DOMAIN_GTT |
-- AMDGPU_GEM_DOMAIN_CPU);
-+ robj->prefered_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
-+ AMDGPU_GEM_DOMAIN_GTT |
-+ AMDGPU_GEM_DOMAIN_CPU);
-+ robj->allowed_domains = robj->prefered_domains;
-+ if (robj->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
-+ robj->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
-+
- amdgpu_bo_unreserve(robj);
- break;
- default:
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-index 73628c7..b79a4f3 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-@@ -254,12 +254,15 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
- bo->adev = adev;
- INIT_LIST_HEAD(&bo->list);
- INIT_LIST_HEAD(&bo->va);
-- bo->initial_domain = domain & (AMDGPU_GEM_DOMAIN_VRAM |
-- AMDGPU_GEM_DOMAIN_GTT |
-- AMDGPU_GEM_DOMAIN_CPU |
-- AMDGPU_GEM_DOMAIN_GDS |
-- AMDGPU_GEM_DOMAIN_GWS |
-- AMDGPU_GEM_DOMAIN_OA);
-+ bo->prefered_domains = domain & (AMDGPU_GEM_DOMAIN_VRAM |
-+ AMDGPU_GEM_DOMAIN_GTT |
-+ AMDGPU_GEM_DOMAIN_CPU |
-+ AMDGPU_GEM_DOMAIN_GDS |
-+ AMDGPU_GEM_DOMAIN_GWS |
-+ AMDGPU_GEM_DOMAIN_OA);
-+ bo->allowed_domains = bo->prefered_domains;
-+ if (!kernel && bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
-+ bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
-
- bo->flags = flags;
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-index d495db3..8c729b1 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-@@ -88,8 +88,6 @@ void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,
- struct amdgpu_bo_list_entry *entry)
- {
- entry->robj = vm->page_directory;
-- entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM;
-- entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM;
- entry->priority = 0;
- entry->tv.bo = &vm->page_directory->tbo;
- entry->tv.shared = true;
-@@ -1131,8 +1129,6 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
- }
-
- entry->robj = pt;
-- entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM;
-- entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM;
- entry->priority = 0;
- entry->tv.bo = &entry->robj->tbo;
- entry->tv.shared = true;
---
-2.7.4
-