[PATCH] drm/amdkfd: simplify APU VRAM handling

Yu, Lang Lang.Yu at amd.com
Sat May 25 14:02:06 UTC 2024


[Public]

Reviewed-by: Lang Yu <Lang.Yu at amd.com>

>-----Original Message-----
>From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
>Deucher
>Sent: Friday, May 24, 2024 10:08 PM
>To: amd-gfx at lists.freedesktop.org
>Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
>Subject: [PATCH] drm/amdkfd: simplify APU VRAM handling
>
>With commit 89773b85599a
>("drm/amdkfd: Let VRAM allocations go to GTT domain on small APUs") big and
>small APU "VRAM" handling in KFD was unified.  Since AMD_IS_APU is set for both
>big and small APUs, we can simplify the checks in the code.
>
>v2: clean up a few more places (Lang)
>
>Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
>---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 16 ++++++++--------
> drivers/gpu/drm/amd/amdkfd/kfd_migrate.c         |  2 +-
> drivers/gpu/drm/amd/amdkfd/kfd_svm.c             |  6 ++----
> drivers/gpu/drm/amd/amdkfd/kfd_svm.h             |  1 -
> 4 files changed, 11 insertions(+), 14 deletions(-)
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>index 336eb51c4839..3af00b57cd8a 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>@@ -196,7 +196,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct
>amdgpu_device *adev,
>                       return -EINVAL;
>
>               vram_size = KFD_XCP_MEMORY_SIZE(adev, xcp_id);
>-              if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
>+              if (adev->flags & AMD_IS_APU) {
>                       system_mem_needed = size;
>                       ttm_mem_needed = size;
>               }
>@@ -233,7 +233,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct
>amdgpu_device *adev,
>       if (adev && xcp_id >= 0) {
>               adev->kfd.vram_used[xcp_id] += vram_needed;
>               adev->kfd.vram_used_aligned[xcp_id] +=
>-                              (adev->gmc.is_app_apu || adev->flags &
>AMD_IS_APU) ?
>+                              (adev->flags & AMD_IS_APU) ?
>                               vram_needed :
>                               ALIGN(vram_needed,
>VRAM_AVAILABLITY_ALIGN);
>       }
>@@ -261,7 +261,7 @@ void amdgpu_amdkfd_unreserve_mem_limit(struct
>amdgpu_device *adev,
>
>               if (adev) {
>                       adev->kfd.vram_used[xcp_id] -= size;
>-                      if (adev->gmc.is_app_apu || adev->flags &
>AMD_IS_APU) {
>+                      if (adev->flags & AMD_IS_APU) {
>                               adev->kfd.vram_used_aligned[xcp_id] -= size;
>                               kfd_mem_limit.system_mem_used -= size;
>                               kfd_mem_limit.ttm_mem_used -= size; @@ -
>894,7 +894,7 @@ static int kfd_mem_attach(struct amdgpu_device *adev, struct
>kgd_mem *mem,
>        * if peer device has large BAR. In contrast, access over xGMI is
>        * allowed for both small and large BAR configurations of peer device
>        */
>-      if ((adev != bo_adev && !(adev->gmc.is_app_apu || adev->flags &
>AMD_IS_APU)) &&
>+      if ((adev != bo_adev && !(adev->flags & AMD_IS_APU)) &&
>           ((mem->domain == AMDGPU_GEM_DOMAIN_VRAM) ||
>            (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL) ||
>            (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_MMIO_REMAP)))
>{ @@ -1682,7 +1682,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct
>amdgpu_device *adev,
>               - atomic64_read(&adev->vram_pin_size)
>               - reserved_for_pt;
>
>-      if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
>+      if (adev->flags & AMD_IS_APU) {
>               system_mem_available = no_system_mem_limit ?
>
>       kfd_mem_limit.max_system_mem_limit :
>                                       kfd_mem_limit.max_system_mem_limit
>- @@ -1730,7 +1730,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>       if (flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
>               domain = alloc_domain = AMDGPU_GEM_DOMAIN_VRAM;
>
>-              if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) {
>+              if (adev->flags & AMD_IS_APU) {
>                       domain = AMDGPU_GEM_DOMAIN_GTT;
>                       alloc_domain = AMDGPU_GEM_DOMAIN_GTT;
>                       alloc_flags = 0;
>@@ -1981,7 +1981,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
>       if (size) {
>               if (!is_imported &&
>                  (mem->bo->preferred_domains ==
>AMDGPU_GEM_DOMAIN_VRAM ||
>-                 ((adev->gmc.is_app_apu || adev->flags & AMD_IS_APU) &&
>+                 ((adev->flags & AMD_IS_APU) &&
>                   mem->bo->preferred_domains ==
>AMDGPU_GEM_DOMAIN_GTT)))
>                       *size = bo_size;
>               else
>@@ -2404,7 +2404,7 @@ static int import_obj_create(struct amdgpu_device
>*adev,
>       (*mem)->bo = bo;
>       (*mem)->va = va;
>       (*mem)->domain = (bo->preferred_domains &
>AMDGPU_GEM_DOMAIN_VRAM) &&
>-                       !(adev->gmc.is_app_apu || adev->flags &
>AMD_IS_APU) ?
>+                       !(adev->flags & AMD_IS_APU) ?
>                        AMDGPU_GEM_DOMAIN_VRAM :
>AMDGPU_GEM_DOMAIN_GTT;
>
>       (*mem)->mapped_to_gpu_memory = 0;
>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
>b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
>index 4816fcb9803a..8ee3d07ffbdf 100644
>--- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
>@@ -1023,7 +1023,7 @@ int kgd2kfd_init_zone_device(struct amdgpu_device
>*adev)
>       if (amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(9, 0, 1))
>               return -EINVAL;
>
>-      if (adev->gmc.is_app_apu || adev->flags & AMD_IS_APU)
>+      if (adev->flags & AMD_IS_APU)
>               return 0;
>
>       pgmap = &kfddev->pgmap;
>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
>b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
>index 28c2c1b66226..407636a68814 100644
>--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
>@@ -2634,8 +2634,7 @@ svm_range_best_restore_location(struct svm_range
>*prange,
>               return -1;
>       }
>
>-      if (node->adev->gmc.is_app_apu ||
>-          node->adev->flags & AMD_IS_APU)
>+      if (node->adev->flags & AMD_IS_APU)
>               return 0;
>
>       if (prange->preferred_loc == gpuid ||
>@@ -3353,8 +3352,7 @@ svm_range_best_prefetch_location(struct svm_range
>*prange)
>               goto out;
>       }
>
>-      if (bo_node->adev->gmc.is_app_apu ||
>-          bo_node->adev->flags & AMD_IS_APU) {
>+      if (bo_node->adev->flags & AMD_IS_APU) {
>               best_loc = 0;
>               goto out;
>       }
>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
>b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
>index 9c37bd0567ef..70c1776611c4 100644
>--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.h
>@@ -201,7 +201,6 @@ void svm_range_list_lock_and_flush_work(struct
>svm_range_list *svms, struct mm_s
>  * is initialized to not 0 when page migration register device memory.
>  */
> #define KFD_IS_SVM_API_SUPPORTED(adev) ((adev)->kfd.pgmap.type != 0 ||\
>-                                      (adev)->gmc.is_app_apu ||\
>                                       ((adev)->flags & AMD_IS_APU))
>
> void svm_range_bo_unref_async(struct svm_range_bo *svm_bo);
>--
>2.45.1



More information about the amd-gfx mailing list