kfd_cwsr_init(kfd);
- svm_migrate_init(kfd->adev);
-
-
dev_info(kfd_device, "Total number of KFD nodes to be created: %d\n",
kfd->num_nodes);
kfd->nodes[i] = node;
}
+ svm_migrate_init(kfd->adev);
+
if (kfd_resume_iommu(kfd))
goto kfd_resume_iommu_error;
if (!KFD_IS_SOC15(kfddev->dev))
return -EINVAL;
+ svm_range_set_max_pages(adev);
+
+ if (adev->gmc.is_app_apu)
+ return 0;
+
pgmap = &kfddev->pgmap;
memset(pgmap, 0, sizeof(*pgmap));
amdgpu_amdkfd_reserve_system_mem(SVM_HMM_PAGE_STRUCT_SIZE(size));
- svm_range_set_max_pages(adev);
-
pr_info("HMM registered %ldMB device memory\n", size >> 20);
return 0;
{
uint64_t max_pages;
uint64_t pages, _pages;
+ uint64_t min_pages = 0;
+ int i;
+
+ for (i = 0; i < adev->kfd.dev->num_nodes; i++) {
+ pages = KFD_XCP_MEMORY_SIZE(adev, adev->kfd.dev->nodes[i]->xcp->id) >> 17;
+ pages = clamp(pages, 1ULL << 9, 1ULL << 18);
+ pages = rounddown_pow_of_two(pages);
+ min_pages = min_not_zero(min_pages, pages);
+ }
- /* 1/32 VRAM size in pages */
- pages = adev->gmc.real_vram_size >> 17;
- pages = clamp(pages, 1ULL << 9, 1ULL << 18);
- pages = rounddown_pow_of_two(pages);
do {
max_pages = READ_ONCE(max_svm_range_pages);
- _pages = min_not_zero(max_pages, pages);
+ _pages = min_not_zero(max_pages, min_pages);
} while (cmpxchg(&max_svm_range_pages, max_pages, _pages) != max_pages);
}