diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0430-drm-amdgpu-fix-bo-list-handling-in-CS.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0430-drm-amdgpu-fix-bo-list-handling-in-CS.patch | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/common/recipes-kernel/linux/files/0430-drm-amdgpu-fix-bo-list-handling-in-CS.patch b/common/recipes-kernel/linux/files/0430-drm-amdgpu-fix-bo-list-handling-in-CS.patch deleted file mode 100644 index 1ed88421..00000000 --- a/common/recipes-kernel/linux/files/0430-drm-amdgpu-fix-bo-list-handling-in-CS.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 34cb581a7d99401cad0e1c43b528690885435f5b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Tue, 4 Aug 2015 11:54:48 +0200 -Subject: [PATCH 0430/1050] drm/amdgpu: fix bo list handling in CS -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We didn't initialized the mutex in the cloned bo list resulting in nice -warnings from lockdep. Also fixes error handling in this function. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Reviewed-by: Chunming Zhou <david1.zhou@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 83 ++++++++++++----------------- - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 5 +- - 3 files changed, 37 insertions(+), 56 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 4d6a3e8..eadbe79 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -1078,11 +1078,10 @@ struct amdgpu_bo_list { - }; - - struct amdgpu_bo_list * -+amdgpu_bo_list_clone(struct amdgpu_bo_list *list); -+struct amdgpu_bo_list * - amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id); - void amdgpu_bo_list_put(struct amdgpu_bo_list *list); --void amdgpu_bo_list_copy(struct amdgpu_device *adev, -- struct amdgpu_bo_list *dst, -- struct amdgpu_bo_list *src); - 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 4d27fa1..7eed523b 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c -@@ -62,6 +62,39 @@ static int amdgpu_bo_list_create(struct amdgpu_fpriv *fpriv, - return 0; - } - -+struct amdgpu_bo_list * -+amdgpu_bo_list_clone(struct amdgpu_bo_list *list) -+{ -+ struct amdgpu_bo_list *result; -+ unsigned i; -+ -+ result = kmalloc(sizeof(struct amdgpu_bo_list), GFP_KERNEL); -+ if (!result) -+ return NULL; -+ -+ result->array = drm_calloc_large(list->num_entries, -+ sizeof(struct amdgpu_bo_list_entry)); -+ if (!result->array) { -+ kfree(result); -+ return NULL; -+ } -+ -+ mutex_init(&result->lock); -+ result->gds_obj = list->gds_obj; -+ result->gws_obj = list->gws_obj; -+ result->oa_obj = list->oa_obj; -+ result->has_userptr = list->has_userptr; -+ result->num_entries = list->num_entries; -+ -+ memcpy(result->array, list->array, list->num_entries * -+ sizeof(struct amdgpu_bo_list_entry)); -+ -+ for (i = 0; i < result->num_entries; ++i) -+ amdgpu_bo_ref(result->array[i].robj); -+ -+ return result; -+} -+ - static void amdgpu_bo_list_destroy(struct amdgpu_fpriv *fpriv, int id) - { - struct amdgpu_bo_list *list; -@@ -166,56 +199,6 @@ void amdgpu_bo_list_put(struct amdgpu_bo_list *list) - mutex_unlock(&list->lock); - } - --void amdgpu_bo_list_copy(struct amdgpu_device *adev, -- struct amdgpu_bo_list *dst, -- struct amdgpu_bo_list *src) --{ -- struct amdgpu_bo_list_entry *array; -- struct amdgpu_bo *gds_obj = adev->gds.gds_gfx_bo; -- struct amdgpu_bo *gws_obj = adev->gds.gws_gfx_bo; -- struct amdgpu_bo *oa_obj = adev->gds.oa_gfx_bo; -- -- bool has_userptr = false; -- unsigned i; -- -- array = drm_calloc_large(src->num_entries, sizeof(struct amdgpu_bo_list_entry)); -- if (!array) -- return; -- memset(array, 0, src->num_entries * sizeof(struct amdgpu_bo_list_entry)); -- -- for (i = 0; i < src->num_entries; ++i) { -- memcpy(array, src->array, -- src->num_entries * sizeof(struct amdgpu_bo_list_entry)); -- array[i].robj = amdgpu_bo_ref(src->array[i].robj); -- if (amdgpu_ttm_tt_has_userptr(array[i].robj->tbo.ttm)) { -- has_userptr = true; -- array[i].prefered_domains = AMDGPU_GEM_DOMAIN_GTT; -- array[i].allowed_domains = AMDGPU_GEM_DOMAIN_GTT; -- } -- array[i].tv.bo = &array[i].robj->tbo; -- array[i].tv.shared = true; -- -- if (array[i].prefered_domains == AMDGPU_GEM_DOMAIN_GDS) -- gds_obj = array[i].robj; -- if (array[i].prefered_domains == AMDGPU_GEM_DOMAIN_GWS) -- gws_obj = array[i].robj; -- if (array[i].prefered_domains == AMDGPU_GEM_DOMAIN_OA) -- oa_obj = array[i].robj; -- } -- -- for (i = 0; i < dst->num_entries; ++i) -- amdgpu_bo_unref(&dst->array[i].robj); -- -- drm_free_large(dst->array); -- -- dst->gds_obj = gds_obj; -- dst->gws_obj = gws_obj; -- dst->oa_obj = oa_obj; -- dst->has_userptr = has_userptr; -- dst->array = array; -- dst->num_entries = src->num_entries; --} -- - void amdgpu_bo_list_free(struct amdgpu_bo_list *list) - { - unsigned i; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index d4cc232..aa1bc24 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -186,11 +186,10 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) - } - bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle); - if (bo_list && !bo_list->has_userptr) { -- p->bo_list = kzalloc(sizeof(struct amdgpu_bo_list), GFP_KERNEL); -+ p->bo_list = amdgpu_bo_list_clone(bo_list); -+ amdgpu_bo_list_put(bo_list); - if (!p->bo_list) - return -ENOMEM; -- amdgpu_bo_list_copy(p->adev, p->bo_list, bo_list); -- amdgpu_bo_list_put(bo_list); - } else if (bo_list && bo_list->has_userptr) - p->bo_list = bo_list; - else --- -1.9.1 - |