[Public] [Why] After s3, In radv there is huge fps drop in games. This is because when memory is allocated using radv_amdgpu_winsys_bo_create() with both AMDGPU_GEM_DOMAIN_VRAM and AMDGPU_GEM_DOMAIN_GTT domains set, the kernel memory management after resume fails to move the data back to VRAM. In kernel memory management, ttm_bo_mem_compat() function returns true and hence data is not moved back to VRAM. [How] Implement the idea suggested by Christian Koenig. During suspend move the data to system RAM instead of GTT. Due to this ttm_bo_mem_compat() will return false and data will be moved back to VRAM. Suggested-by: Christian König mailto:christian.koenig@xxxxxxx Signed-off-by: Yogesh mohan marimuthu mailto:yogesh.mohanmarimuthu@xxxxxxx Reviewed-by: Christian König mailto:christian.koenig@xxxxxxx --- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 446943e32..44ec59998 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -136,7 +136,13 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo, return; case TTM_PL_VRAM: - if (!adev->mman.buffer_funcs_enabled) { + /* Move data to system memory for S3 so that while resume + * ttm_bo_mem_compat() will return false and data will be + * moved back to VRAM also in case of bo with both + * AMDGPU_GEM_DOMAIN_GTT and AMDGPU_GEM_DOMAIN_VRAM domain + * set in bo->preferred_domains. + */ + if (!adev->mman.buffer_funcs_enabled || adev->in_s3) { /* Move to system memory */ amdgpu_bo_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU); } else if (!amdgpu_gmc_vram_full_visible(&adev->gmc) && -- 2.25.1