diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0220-drm-amdgpu-cleanup-amdgpu_cs_parser_relocs.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0220-drm-amdgpu-cleanup-amdgpu_cs_parser_relocs.patch | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0220-drm-amdgpu-cleanup-amdgpu_cs_parser_relocs.patch b/common/recipes-kernel/linux/files/0220-drm-amdgpu-cleanup-amdgpu_cs_parser_relocs.patch new file mode 100644 index 00000000..d54cd8fd --- /dev/null +++ b/common/recipes-kernel/linux/files/0220-drm-amdgpu-cleanup-amdgpu_cs_parser_relocs.patch @@ -0,0 +1,97 @@ +From f58575533de1b3e552a4e607186dd54a95df673b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Fri, 18 Dec 2015 20:33:52 +0100 +Subject: [PATCH 0220/1110] drm/amdgpu: cleanup amdgpu_cs_parser_relocs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Rename it to amdgpu_cs_parser_bos and move validation and bo list init there. + +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> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index f94469d..e615aa0 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -181,15 +181,12 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + 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_bo_list; ++ goto put_ctx; + } + + p->nchunks = cs->in.num_chunks; +@@ -197,7 +194,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + GFP_KERNEL); + if (!p->chunks) { + ret = -ENOMEM; +- goto put_bo_list; ++ goto put_ctx; + } + + for (i = 0; i < p->nchunks; i++) { +@@ -273,9 +270,7 @@ free_partial_kdata: + for (; i >= 0; i--) + drm_free_large(p->chunks[i].kdata); + kfree(p->chunks); +-put_bo_list: +- if (p->bo_list) +- amdgpu_bo_list_put(p->bo_list); ++put_ctx: + amdgpu_ctx_put(p->ctx); + free_chunk: + kfree(chunk_array); +@@ -383,7 +378,8 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, + return 0; + } + +-static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p) ++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; +@@ -391,12 +387,15 @@ static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p) + bool need_mmap_lock = false; + int i, 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); ++ p->bo_list->array[i].priority); + + amdgpu_cs_buckets_get_list(&buckets, &p->validated); + } +@@ -822,7 +821,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_relocs(&parser); ++ r = amdgpu_cs_parser_bos(&parser, data); + if (r == -ENOMEM) + DRM_ERROR("Not enough memory for command submission!\n"); + else if (r && r != -ERESTARTSYS) +-- +2.7.4 + |