| From foo@baz Tue Oct 2 04:59:29 PDT 2018 |
| From: Emily Deng <Emily.Deng@amd.com> |
| Date: Wed, 22 Aug 2018 20:18:25 +0800 |
| Subject: amdgpu: fix multi-process hang issue |
| |
| From: Emily Deng <Emily.Deng@amd.com> |
| |
| [ Upstream commit 2f40c6eac74a2a60921cdec9e9a8a57e88e31434 ] |
| |
| SWDEV-146499: hang during multi vulkan process testing |
| |
| cause: |
| the second frame's PREAMBLE_IB have clear-state |
| and LOAD actions, those actions ruin the pipeline |
| that is still doing process in the previous frame's |
| work-load IB. |
| |
| fix: |
| need insert pipeline sync if have context switch for |
| SRIOV (because only SRIOV will report PREEMPTION flag |
| to UMD) |
| |
| Signed-off-by: Monk Liu <Monk.Liu@amd.com> |
| Signed-off-by: Emily Deng <Emily.Deng@amd.com> |
| Reviewed-by: Christian Kรถnig <christian.koenig@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| @@ -164,8 +164,10 @@ int amdgpu_ib_schedule(struct amdgpu_rin |
| return r; |
| } |
| |
| + need_ctx_switch = ring->current_ctx != fence_ctx; |
| if (ring->funcs->emit_pipeline_sync && job && |
| ((tmp = amdgpu_sync_get_fence(&job->sched_sync, NULL)) || |
| + (amdgpu_sriov_vf(adev) && need_ctx_switch) || |
| amdgpu_vm_need_pipeline_sync(ring, job))) { |
| need_pipe_sync = true; |
| dma_fence_put(tmp); |
| @@ -196,7 +198,6 @@ int amdgpu_ib_schedule(struct amdgpu_rin |
| } |
| |
| skip_preamble = ring->current_ctx == fence_ctx; |
| - need_ctx_switch = ring->current_ctx != fence_ctx; |
| if (job && ring->funcs->emit_cntxcntl) { |
| if (need_ctx_switch) |
| status |= AMDGPU_HAVE_CTX_SWITCH; |