[PATCH 2/4] drm/amdgpu: workaround for VM fault caused by SDMA set_wptr
Ding, Pixel
Pixel.Ding at amd.com
Fri Oct 13 09:21:03 UTC 2017
Yes I tried smp_mb but it doesn’t help…
We will follow up this issue continuously until fix the root cause.
—
Sincerely Yours,
Pixel
On 13/10/2017, 5:17 PM, "Christian König" <ckoenig.leichtzumerken at gmail.com> wrote:
>Am 13.10.2017 um 10:26 schrieb Pixel Ding:
>> From: pding <Pixel.Ding at amd.com>
>>
>> The polling memory was standalone in VRAM before, so the HDP flush
>> introduced latency that hides a VM fault issue. Now polling memory
>> leverages the WB in system memory and HDP flush is not required, the
>> VM fault at same page happens.
>>
>> Add delay back to workaround until the root cause is found.
>>
>> Tests: VP1 or launch 40 instances of glxinfo at the same time.
>>
>> Signed-off-by: pding <Pixel.Ding at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> index b1de44f..5c4bbe1 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
>> @@ -381,6 +381,9 @@ static void sdma_v3_0_ring_set_wptr(struct amdgpu_ring *ring)
>> if (ring->use_doorbell) {
>> /* XXX check if swapping is necessary on BE */
>> adev->wb.wb[ring->wptr_offs] = lower_32_bits(ring->wptr) << 2;
>> + /* workaround: VM fault always happen at page 2046 */
>> + if (amdgpu_sriov_vf(adev))
>> + udelay(500);
>
>Have you tried using a memory barrier here?
>
>That looks like it will have massive impact on performance.
>
>Regards,
>Christian.
>
>> WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr) << 2);
>> } else {
>> int me = (ring == &ring->adev->sdma.instance[0].ring) ? 0 : 1;
>
>
More information about the amd-gfx
mailing list