[PATCH] drm/ttm: Restore ttm prefaulting

Koenig, Christian Christian.Koenig at amd.com
Fri Sep 13 11:17:25 UTC 2019


Am 13.09.19 um 13:07 schrieb Thomas Hellström (VMware):
> On 9/13/19 12:53 PM, Koenig, Christian wrote:
>> Am 12.09.19 um 20:38 schrieb Thomas Hellström (VMware):
>>> From: Thomas Hellstrom <thellstrom at vmware.com>
>>>
>>> Commit 4daa4fba3a38 ("gpu: drm: ttm: Adding new return type 
>>> vm_fault_t")
>>> broke TTM prefaulting. Since vmf_insert_mixed() typically always 
>>> returns
>>> VM_FAULT_NOPAGE, prefaulting stops after the second PTE.
>>>
>>> Restore (almost) the original behaviour. Unfortunately we can no longer
>>> with the new vm_fault_t return type determine whether a prefaulting
>>> PTE insertion hit an already populated PTE, and terminate the insertion
>>> loop. Instead we continue with the pre-determined number of prefaults.
>>>
>>> Fixes: 4daa4fba3a38 ("gpu: drm: ttm: Adding new return type 
>>> vm_fault_t")
>>> Cc: Souptick Joarder <jrdr.linux at gmail.com>
>>> Cc: Christian König <christian.koenig at amd.com>
>>> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
>> Reviewed-by: Christian König <christian.koenig at amd.com>
>>
>> Going to pick that up when Alex rebases our upstream branch.
>>
>> Christian.
>>
>>> ---
>>>    drivers/gpu/drm/ttm/ttm_bo_vm.c | 16 +++++++---------
>>>    1 file changed, 7 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c 
>>> b/drivers/gpu/drm/ttm/ttm_bo_vm.c
>>> index 5a580adeb9d1..aa18e8a53727 100644
>>> --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
>>> +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
>>> @@ -290,15 +290,13 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct 
>>> vm_fault *vmf,
>>>            else
>>>                ret = vmf_insert_pfn(&cvma, address, pfn);
>>>    -        /*
>>> -         * Somebody beat us to this PTE or prefaulting to
>>> -         * an already populated PTE, or prefaulting error.
>>> -         */
>>> -
>>> -        if (unlikely((ret == VM_FAULT_NOPAGE && i > 0)))
>>> -            break;
>>> -        else if (unlikely(ret & VM_FAULT_ERROR))
>>> -            goto out_io_unlock;
>>> +        /* Never error on prefaulted PTEs */
>>> +        if (unlikely((ret & VM_FAULT_ERROR))) {
>>> +            if (i == 0)
>>> +                goto out_io_unlock;
>>> +            else
>
> We could perhaps skip that else. Let me know if you want me to respin.

I would rather like to keep it, when something goes wrong we should 
really stop faulting in more.

Christian.

>
> /Thomas
>
>
>
>>> +                break;
>>> +        }
>>>               address += PAGE_SIZE;
>>>            if (unlikely(++page_offset >= page_last))
>
>



More information about the dri-devel mailing list