Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1939e3e2 authored by monk.liu's avatar monk.liu Committed by Alex Deucher
Browse files

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: default avatarMonk.Liu <monk.liu@amd.com>
Reviewed-by: default avatarChunming Zhou <david1.zhou@amd.com>
Reviewed-by: default avatarJammy Zhou <jammy.zhou@amd.com>
parent a895c222
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -186,6 +186,9 @@ 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 (!amdgpu_enable_scheduler)
		p->bo_list = bo_list;
	else {
		if (bo_list && !bo_list->has_userptr) {
			p->bo_list = amdgpu_bo_list_clone(bo_list);
			amdgpu_bo_list_put(bo_list);
@@ -195,6 +198,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
			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);