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

Commit 4274f5d4 authored by Chunming Zhou's avatar Chunming Zhou Committed by Alex Deucher
Browse files

drm/amdgpu: prepare job before push to sw queue for pte ring



user mode will still use pte ring as a normal ring.
if the prepare job generates another command(update pte) on its ring in scheduler,
then will kill scheduler which is going to waiting later job but pending running job.

Signed-off-by: default avatarChunming Zhou <david1.zhou@amd.com>
Acked-by: default avatarChristian K?nig <christian.koenig@amd.com>
Reviewed-by: default avatarJammy Zhou <Jammy.Zhou@amd.com>
parent 4b559c90
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -902,6 +902,7 @@ struct amdgpu_ring {
	struct amdgpu_ctx	*current_ctx;
	enum amdgpu_ring_type	type;
	char			name[16];
	bool                    is_pte_ring;
};

/*
+1 −1
Original line number Diff line number Diff line
@@ -909,7 +909,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
			amdgpu_cs_parser_get_ring(adev, parser);
		parser->uf.sequence = atomic64_inc_return(
			&parser->ctx->rings[ring->idx].c_entity.last_queued_v_seq);
		if ((parser->bo_list && parser->bo_list->has_userptr)) {
		if (ring->is_pte_ring || (parser->bo_list && parser->bo_list->has_userptr)) {
			r = amdgpu_cs_parser_prepare_job(parser);
			if (r)
				goto out;
+1 −0
Original line number Diff line number Diff line
@@ -1404,5 +1404,6 @@ static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev)
	if (adev->vm_manager.vm_pte_funcs == NULL) {
		adev->vm_manager.vm_pte_funcs = &cik_sdma_vm_pte_funcs;
		adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring;
		adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -1415,5 +1415,6 @@ static void sdma_v2_4_set_vm_pte_funcs(struct amdgpu_device *adev)
	if (adev->vm_manager.vm_pte_funcs == NULL) {
		adev->vm_manager.vm_pte_funcs = &sdma_v2_4_vm_pte_funcs;
		adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring;
		adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -1540,5 +1540,6 @@ static void sdma_v3_0_set_vm_pte_funcs(struct amdgpu_device *adev)
	if (adev->vm_manager.vm_pte_funcs == NULL) {
		adev->vm_manager.vm_pte_funcs = &sdma_v3_0_vm_pte_funcs;
		adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring;
		adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true;
	}
}