drm/amdgpu: fix colliding of preemption
what: some os preemption path is messed up with world switch preemption fix: cleanup those logics so os preemption not mixed with world switch this patch is a general fix for issues comes from SRIOV MCBP, but there is still UMD side issues not resovlved yet, so this patch cannot fix all world switch bug. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Acked-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
9cfb06920e
commit
6325b38d89
|
@ -70,7 +70,8 @@ uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
|
||||||
uint32_t index = 0;
|
uint32_t index = 0;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (vmid == 0 || !amdgpu_mcbp)
|
/* don't enable OS preemption on SDMA under SRIOV */
|
||||||
|
if (amdgpu_sriov_vf(adev) || vmid == 0 || !amdgpu_mcbp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
r = amdgpu_sdma_get_index_from_ring(ring, &index);
|
r = amdgpu_sdma_get_index_from_ring(ring, &index);
|
||||||
|
|
|
@ -4413,7 +4413,7 @@ static void gfx_v10_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
|
||||||
|
|
||||||
control |= ib->length_dw | (vmid << 24);
|
control |= ib->length_dw | (vmid << 24);
|
||||||
|
|
||||||
if (amdgpu_mcbp && (ib->flags & AMDGPU_IB_FLAG_PREEMPT)) {
|
if ((amdgpu_sriov_vf(ring->adev) || amdgpu_mcbp) && (ib->flags & AMDGPU_IB_FLAG_PREEMPT)) {
|
||||||
control |= INDIRECT_BUFFER_PRE_ENB(1);
|
control |= INDIRECT_BUFFER_PRE_ENB(1);
|
||||||
|
|
||||||
if (flags & AMDGPU_IB_PREEMPTED)
|
if (flags & AMDGPU_IB_PREEMPTED)
|
||||||
|
@ -4421,7 +4421,7 @@ static void gfx_v10_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
|
||||||
|
|
||||||
if (!(ib->flags & AMDGPU_IB_FLAG_CE))
|
if (!(ib->flags & AMDGPU_IB_FLAG_CE))
|
||||||
gfx_v10_0_ring_emit_de_meta(ring,
|
gfx_v10_0_ring_emit_de_meta(ring,
|
||||||
flags & AMDGPU_IB_PREEMPTED ? true : false);
|
(!amdgpu_sriov_vf(ring->adev) && flags & AMDGPU_IB_PREEMPTED) ? true : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
amdgpu_ring_write(ring, header);
|
amdgpu_ring_write(ring, header);
|
||||||
|
@ -4568,9 +4568,9 @@ static void gfx_v10_0_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flag
|
||||||
{
|
{
|
||||||
uint32_t dw2 = 0;
|
uint32_t dw2 = 0;
|
||||||
|
|
||||||
if (amdgpu_mcbp)
|
if (amdgpu_mcbp || amdgpu_sriov_vf(ring->adev))
|
||||||
gfx_v10_0_ring_emit_ce_meta(ring,
|
gfx_v10_0_ring_emit_ce_meta(ring,
|
||||||
flags & AMDGPU_IB_PREEMPTED ? true : false);
|
(!amdgpu_sriov_vf(ring->adev) && flags & AMDGPU_IB_PREEMPTED) ? true : false);
|
||||||
|
|
||||||
gfx_v10_0_ring_emit_tmz(ring, true);
|
gfx_v10_0_ring_emit_tmz(ring, true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue