On 28/06/17 11:33 AM, John Brooks wrote:
> There is no need for page faults to force BOs into visible VRAM if it's
> full, and the time it takes to do so is great enough to cause noticeable
> stuttering. Add GTT as a possible placement so that if visible VRAM is
> full, page faults move BOs to GTT instead of evicting other BOs from VRAM.
> 
> Signed-off-by: John Brooks <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 658d7b1..a215d8c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -968,19 +968,21 @@ int amdgpu_bo_fault_reserve_notify(struct 
> ttm_buffer_object *bo)
>       /* hurrah the memory is not visible ! */
>       atomic64_inc(&adev->num_vram_cpu_page_faults);
>       abo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> -     amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM);
> +     amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM |
> +                                      AMDGPU_GEM_DOMAIN_GTT);
> +
> +     /* Avoid costly evictions; only set GTT as a busy placement */
> +     abo->placement.num_busy_placement = 1;
> +     abo->placement.busy_placement = &abo->placements[1];
>  
>       r = ttm_bo_validate(bo, &abo->placement, false, false);
> -     if (unlikely(r == -ENOMEM)) {
> -             amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT);
> -             return ttm_bo_validate(bo, &abo->placement, false, false);
> -     } else if (unlikely(r != 0)) {
> +     if (unlikely(r != 0))
>               return r;
> -     }
>  
>       offset = bo->mem.start << PAGE_SHIFT;
>       /* this should never happen */
> -     if ((offset + size) > adev->mc.visible_vram_size)
> +     if (bo->mem.mem_type == TTM_PL_VRAM &&
> +         (offset + size) > adev->mc.visible_vram_size)
>               return -EINVAL;
>  
>       return 0;
> 

Reviewed-by: Michel Dänzer <[email protected]>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to