[PATCH 2/4] drm/amdgpu: minor optimize VM moved handling v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2018å¹´01æ??03æ?¥ 17:25, Christian König wrote:
> Am 03.01.2018 um 09:10 schrieb Zhou, David(ChunMing):
>>
>> On 2018å¹´01æ??02æ?¥ 22:47, Christian König wrote:
>>> Try to lock moved BOs if it's successful we can update the
>>> PTEs directly to the new location.
>>>
>>> v2: rebase
>>>
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>> ---
>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 15 ++++++++++++++-
>>>    1 file changed, 14 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> index 3632c69f1814..c1c5ccdee783 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> @@ -1697,18 +1697,31 @@ int amdgpu_vm_handle_moved(struct 
>>> amdgpu_device *adev,
>>>        spin_lock(&vm->status_lock);
>>>        while (!list_empty(&vm->moved)) {
>>>            struct amdgpu_bo_va *bo_va;
>>> +        struct reservation_object *resv;
>>>               bo_va = list_first_entry(&vm->moved,
>>>                struct amdgpu_bo_va, base.vm_status);
>>>            spin_unlock(&vm->status_lock);
>>>    +        resv = bo_va->base.bo->tbo.resv;
>>> +
>>>            /* Per VM BOs never need to bo cleared in the page tables */
>> This reminders us Per-VM-BOs need to cleared as well after we allow to
>> evict/swap out per-vm-bos.
>
> Actually they don't. The page tables only need to be valid during CS.
>
> So what happens is that the per VM-BOs are validated in right before 
> we call amdgpu_vm_handle_moved().
Yeah, agree it for per-vm-bo situation after I checked all adding moved 
list cases:
1. validate pt bos
2. bo invalidate
3. insert_map for per-vm-bo
item #1 and #3 both are per-vm-bo, they are already validated before 
handle_moved().

For item #2, there are three places to call it:
a. amdgpu_bo_vm_update_pte in CS for amdgpu_vm_debug
b. amdgpu_gem_op_ioctl, but it is for evicted list, nothing with moved list.
c. amdgpu_bo_move_notify when bo validate.

For c case, your optimization is valid, we don't need clear for validate bo.
But for a case, yours will break amdgpu_vm_debug functionality.

Right?

Regards,
David Zhou

>
> Regards,
> Christian.
>
>>
>> Regards,
>> David Zhou
>>> -        clear = bo_va->base.bo->tbo.resv != 
>>> vm->root.base.bo->tbo.resv;
>>> +        if (resv == vm->root.base.bo->tbo.resv)
>>> +            clear = false;
>>> +        /* Try to reserve the BO to avoid clearing its ptes */
>>> +        else if (reservation_object_trylock(resv))
>>> +            clear = false;
>>> +        /* Somebody else is using the BO right now */
>>> +        else
>>> +            clear = true;
>>>               r = amdgpu_vm_bo_update(adev, bo_va, clear);
>>>            if (r)
>>>                return r;
>>>    +        if (!clear && resv != vm->root.base.bo->tbo.resv)
>>> +            reservation_object_unlock(resv);
>>> +
>>>            spin_lock(&vm->status_lock);
>>>        }
>>>        spin_unlock(&vm->status_lock);
>



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux