[Public] Hi Alex, 3 places are missed. --- 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) + if (adev->gmc.is_app_apu || 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 91175b1bd9ac..4885d1b2cc29 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -2631,7 +2631,8 @@ svm_range_best_restore_location(struct svm_range *prange, return -1; } - if (node->adev->gmc.is_app_apu) + if (node->adev->gmc.is_app_apu || + node->adev->flags & AMD_IS_APU) return 0; if (prange->preferred_loc == gpuid || @@ -3349,7 +3350,8 @@ svm_range_best_prefetch_location(struct svm_range *prange) goto out; } - if (bo_node->adev->gmc.is_app_apu) { + if (bo_node->adev->gmc.is_app_apu || + bo_node->adev->flags & AMD_IS_APU) { best_loc = 0; goto out; } Regards, Lang >-----Original Message----- >From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Alex >Deucher >Sent: Friday, May 24, 2024 2:39 AM >To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx >Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx> >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. > >Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> >--- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 16 ++++++++--- >----- > drivers/gpu/drm/amd/amdkfd/kfd_svm.h | 1 - > 2 files changed, 8 insertions(+), 9 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_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