[PATCH 3/4] drm/amdgpu: Fix acquiring VM on large-BAR systems

Christian König ckoenig.leichtzumerken at gmail.com
Sat Mar 24 08:34:14 UTC 2018


Am 23.03.2018 um 20:53 schrieb Felix Kuehling:
> On 2018-03-23 03:35 PM, Christian König wrote:
>> Am 23.03.2018 um 20:30 schrieb Felix Kuehling:
>>> On large-BAR systems the VM page tables for compute are accessed by
>>> the CPU. Always allow CPU access to the page directory so that it can
>>> be used later by the CPU when a VM is converted to a compute VM.
>> NAK, that means we initial place the PD in the visible are for GFX
>> which is not desired (not much of an issue for Vega/Raven, but bad for
>> older generations).
> I'm not setting AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED. Doesn't that mean
> the buffer can be placed in invisible VRAM initially?

The difference is the preference. When AMDGPU_GEM_CREATE_NO_CPU_ACCESS 
is set we try to place it initially in invisible VRAM.

Since VM page directories have a low chance of being evicted it will 
just stick in visible VRAM when it was placed initially there.

>> Better to clear the flag later on and set the
>> AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED and then re-validate.
> The AMDGPU_GEM_CREATE_NO_CPU_ACCESS seems to mean "this BO must never be
> CPU mapped". Clearing that flag later kind of defeats the purpose of
> making such a declaration at allocation time. If I know that the buffer
> may need CPU access at some point in the future, I figured I shouldn't
> set the flag in the first place.

Correct, but that only counts for userspace because userspace can't 
modify the flags :)

If I remember correctly we also enforce it in the mmap IOCTL that the 
flag isn't set, but that doesn't really matter for the kernel.

At least the AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED flag is cleared and 
set all the time in the kernel (but not for VM page tables).

> FWIW, I didn't see any example of the AMDGPU_GEM_CREATE_NO_CPU_ACCESS
> flag ever being removed from an existing BO.

Yeah, but that should be harmless as far as I can see.

If you want to avoid the move of the page directory on large BAR systems 
when switching a VM from GFX to compute we can also initially create the 
BO in the system domain.

Thinking about that a bit more that is probably a good idea anyway 
because it avoids using VRAM by just opening the device.

Regards,
Christian.

>
> Regards,
>    Felix
>
>> Regards,
>> Christian.
>>
>>> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
>>> ---
>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 +--
>>>    1 file changed, 1 insertion(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> index 90ff79e..bc3557b 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> @@ -2406,8 +2406,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev,
>>> struct amdgpu_vm *vm,
>>>        if (vm->use_cpu_for_update)
>>>            flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
>>>        else
>>> -        flags |= (AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
>>> -                AMDGPU_GEM_CREATE_SHADOW);
>>> +        flags |= AMDGPU_GEM_CREATE_SHADOW;
>>>          size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
>>>        r = amdgpu_bo_create(adev, size, align, true,
>>> AMDGPU_GEM_DOMAIN_VRAM,
> _______________________________________________
> 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