drm/amdgpu: drop bo_list_clone when no scheduler
authormonk.liu <monk.liu@amd.com>
Thu, 13 Aug 2015 08:19:54 +0000 (16:19 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 17 Aug 2015 20:51:19 +0000 (16:51 -0400)
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

index 8796938216d6002c7d07cd3bc36dfcdbe5c5e702..07e3380ee0f2c8ae7cbd8cd30f9aa2f0b6eea413 100644 (file)
@@ -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);