[PATCH] drm/amdgpu: fix radv vulkan fps drop after s3 resume

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

 



[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.

 

Signed-off-by: Christian König christian.koenig@xxxxxxx

Signed-off-by: Yogesh mohan marimuthu yogesh.mohanmarimuthu@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

 


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

  Powered by Linux