On Mon, May 27, 2024 at 3:22 PM Felix Kuehling <felix.kuehling@xxxxxxx> wrote: > > On 2024-05-24 10:08, Alex Deucher wrote: > > 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@xxxxxxx> > > This is a lot cleaner, thanks. I was looking for something like this > when I reviewed the original patch but missed it. I found it now in > amdgpu_discovery_set_ip_blocks (I think). Yes, that's the place. Alex > > Acked-by: Felix Kuehling <felix.kuehling@xxxxxxx> > > > > --- > > 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);