[PATCH 4/5] drm/amdgpu: Don't force BOs into visible VRAM for page faults
Christian König
deathsimple at vodafone.de
Thu Jul 6 11:41:27 UTC 2017
Am 06.07.2017 um 12:51 schrieb Michel Dänzer:
> From: John Brooks <john at fastquake.com>
>
> 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.
>
> Suggested-by: Michel Dänzer <michel.daenzer at amd.com>
> Signed-off-by: John Brooks <john at fastquake.com>
> Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 93601fbea695..6e24339ecc46 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -974,18 +974,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);
> - 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;
More information about the amd-gfx
mailing list