diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch new file mode 100644 index 00000000..6feeb21c --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch @@ -0,0 +1,59 @@ +From 1939e3e265d2fb984b56829c51f5843bfc6d5292 Mon Sep 17 00:00:00 2001 +From: "monk.liu" <monk.liu@amd.com> +Date: Thu, 13 Aug 2015 16:19:54 +0800 +Subject: [PATCH 0460/1050] drm/amdgpu: drop bo_list_clone when no scheduler + +bo_list_clone() will take a lot of time when bo_list hold too much +elements, like above 7000 + +Signed-off-by: Monk.Liu <monk.liu@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +Reviewed-by: Jammy Zhou <jammy.zhou@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index 8796938..07e3380 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -186,15 +186,19 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + goto out; + } + bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle); +- if (bo_list && !bo_list->has_userptr) { +- p->bo_list = amdgpu_bo_list_clone(bo_list); +- amdgpu_bo_list_put(bo_list); +- if (!p->bo_list) +- return -ENOMEM; +- } else if (bo_list && bo_list->has_userptr) ++ if (!amdgpu_enable_scheduler) + p->bo_list = bo_list; +- else +- p->bo_list = NULL; ++ else { ++ if (bo_list && !bo_list->has_userptr) { ++ p->bo_list = amdgpu_bo_list_clone(bo_list); ++ amdgpu_bo_list_put(bo_list); ++ if (!p->bo_list) ++ return -ENOMEM; ++ } else if (bo_list && bo_list->has_userptr) ++ p->bo_list = bo_list; ++ else ++ p->bo_list = NULL; ++ } + + /* get chunks */ + INIT_LIST_HEAD(&p->validated); +@@ -495,7 +499,7 @@ static void amdgpu_cs_parser_fini_late(struct amdgpu_cs_parser *parser) + if (parser->ctx) + amdgpu_ctx_put(parser->ctx); + if (parser->bo_list) { +- if (!parser->bo_list->has_userptr) ++ if (amdgpu_enable_scheduler && !parser->bo_list->has_userptr) + amdgpu_bo_list_free(parser->bo_list); + else + amdgpu_bo_list_put(parser->bo_list); +-- +1.9.1 + |