[PATCH] drm/amdgpu: fix huge page handling on Vega10
Christian König
ckoenig.leichtzumerken at gmail.com
Tue Nov 13 08:14:44 UTC 2018
Am 12.11.18 um 22:45 schrieb Samuel Pitoiset:
>
>
> On 11/12/18 6:16 PM, Alex Deucher wrote:
>> On Mon, Nov 12, 2018 at 12:09 PM Christian König
>> <ckoenig.leichtzumerken at gmail.com> wrote:
>>>
>>> We accidentially set the huge flag on the parent instead of the childs.
>>> This caused some VM faults under memory pressure.
>>>
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>
> Yes, this fixes GPU hangs with F12017 and RoTR with RADV.
>
> Thanks for the fix Christian!
Just FYI I take sentences as this as a "Tested-by: Samuel Pitoiset
<samuel.pitoiset at gmail.com>".
So if you don't want your mail address to show up in a kernel commit
start better say so before Alex pushes it upstream :)
Christian.
>
>>
>> Acked-by: Alex Deucher <alexander.deucher at amd.com>
>>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 18 ++++++++++--------
>>> 1 file changed, 10 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> index 352b30409060..dad0e2342df9 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> @@ -1632,13 +1632,6 @@ static int amdgpu_vm_update_ptes(struct
>>> amdgpu_pte_update_params *params,
>>> continue;
>>> }
>>>
>>> - /* First check if the entry is already handled */
>>> - if (cursor.pfn < frag_start) {
>>> - cursor.entry->huge = true;
>>> - amdgpu_vm_pt_next(adev, &cursor);
>>> - continue;
>>> - }
>>> -
>>> /* If it isn't already handled it can't be a huge
>>> page */
>>> if (cursor.entry->huge) {
>>> /* Add the entry to the relocated list to
>>> update it. */
>>> @@ -1701,8 +1694,17 @@ static int amdgpu_vm_update_ptes(struct
>>> amdgpu_pte_update_params *params,
>>> }
>>> } while (frag_start < entry_end);
>>>
>>> - if (frag >= shift)
>>> + if (amdgpu_vm_pt_descendant(adev, &cursor)) {
>>> + /* Mark all child entries as huge */
>>> + while (cursor.pfn < frag_start) {
>>> + cursor.entry->huge = true;
>>> + amdgpu_vm_pt_next(adev, &cursor);
>>> + }
>>> +
>>> + } else if (frag >= shift) {
>>> + /* or just move on to the next on the same
>>> level. */
>>> amdgpu_vm_pt_next(adev, &cursor);
>>> + }
>>> }
>>>
>>> return 0;
>>> --
>>> 2.14.1
>>>
>>> _______________________________________________
>>> amd-gfx mailing list
>>> amd-gfx at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>>
More information about the amd-gfx
mailing list