diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0221-drm-amdgpu-cleanup-bo-list-bucket-handling.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/0221-drm-amdgpu-cleanup-bo-list-bucket-handling.patch | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0221-drm-amdgpu-cleanup-bo-list-bucket-handling.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0221-drm-amdgpu-cleanup-bo-list-bucket-handling.patch deleted file mode 100644 index bdbc4a11..00000000 --- a/meta-amdfalconx86/recipes-kernel/linux/files/0221-drm-amdgpu-cleanup-bo-list-bucket-handling.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 401109ddd43b20b0bbf8965bac4c5d5ac68e8f5c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Fri, 18 Dec 2015 21:26:47 +0100 -Subject: [PATCH 0221/1110] drm/amdgpu: cleanup bo list bucket handling -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Move that into the BO list. No functional change. - -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 | 2 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 36 +++++++++++++++++++- - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 51 ++--------------------------- - 3 files changed, 39 insertions(+), 50 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 8676505..b7b5d2e 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -1064,6 +1064,8 @@ 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 f82a2dd..9da4bd0 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c -@@ -32,6 +32,9 @@ - #include "amdgpu.h" - #include "amdgpu_trace.h" - -+#define AMDGPU_BO_LIST_MAX_PRIORITY 32u -+#define AMDGPU_BO_LIST_NUM_BUCKETS (AMDGPU_BO_LIST_MAX_PRIORITY + 1) -+ - static int amdgpu_bo_list_create(struct amdgpu_fpriv *fpriv, - struct amdgpu_bo_list **result, - int *id) -@@ -106,7 +109,8 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev, - - entry->robj = amdgpu_bo_ref(gem_to_amdgpu_bo(gobj)); - drm_gem_object_unreference_unlocked(gobj); -- entry->priority = info[i].bo_priority; -+ 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) -@@ -161,6 +165,36 @@ amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id) - return result; - } - -+void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list, -+ struct list_head *validated) -+{ -+ /* 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 list_head bucket[AMDGPU_BO_LIST_NUM_BUCKETS]; -+ unsigned i; -+ -+ for (i = 0; i < AMDGPU_BO_LIST_NUM_BUCKETS; i++) -+ INIT_LIST_HEAD(&bucket[i]); -+ -+ /* 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. -+ */ -+ for (i = 0; i < list->num_entries; i++) { -+ unsigned priority = list->array[i].priority; -+ -+ list_add_tail(&list->array[i].tv.head, -+ &bucket[priority]); -+ } -+ -+ /* Connect the sorted buckets in the output list. */ -+ for (i = 0; i < AMDGPU_BO_LIST_NUM_BUCKETS; i++) -+ list_splice(&bucket[i], validated); -+} -+ - void amdgpu_bo_list_put(struct amdgpu_bo_list *list) - { - mutex_unlock(&list->lock); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index e615aa0..76ec99d 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -30,47 +30,6 @@ - #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) -@@ -382,22 +341,16 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, - union drm_amdgpu_cs *cs) - { - struct amdgpu_fpriv *fpriv = p->filp->driver_priv; -- struct amdgpu_cs_buckets buckets; - struct list_head duplicates; - bool need_mmap_lock = false; -- int i, r; -+ int r; - - INIT_LIST_HEAD(&p->validated); - - p->bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle); - if (p->bo_list) { - need_mmap_lock = p->bo_list->has_userptr; -- 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); -+ amdgpu_bo_list_get_list(p->bo_list, &p->validated); - } - - INIT_LIST_HEAD(&duplicates); --- -2.7.4 - |