aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0460-drm-amdgpu-drop-bo_list_clone-when-no-scheduler.patch
diff options
context:
space:
mode:
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.patch59
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
+