Skip to content

Commit eac32ff

Browse files
hkasivisalexdeucher
authored andcommitted
drm/amdkfd: Fix GPU mappings for APU after prefetch
Fix the following corner case:- Consider a 2M huge page SVM allocation, followed by prefetch call for the first 4K page. The whole range is initially mapped with single PTE. After the prefetch, this range gets split to first page + rest of the pages. Currently, the first page mapping is not updated on MI300A (APU) since page hasn't migrated. However, after range split PTE mapping it not valid. Fix this by forcing page table update for the whole range when prefetch is called. Calling prefetch on APU doesn't improve performance. If all it deteriotes. However, functionality has to be supported. v2: Use apu_prefer_gtt as this issue doesn't apply to APUs with carveout VRAM v3: Simplify by setting the flag for all ASICs as it doesn't affect dGPU v4: Remove v2 and v3 changes. Force update_mapping when range is split at a size that is not aligned to prange granularity Suggested-by: Philip Yang <Philip.Yang@amd.com> Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> Reviewed-by: Philip Yang<Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit 076470b)
1 parent d15deaf commit eac32ff

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

drivers/gpu/drm/amd/amdkfd/kfd_svm.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3687,6 +3687,8 @@ svm_range_set_attr(struct kfd_process *p, struct mm_struct *mm,
36873687
svm_range_apply_attrs(p, prange, nattr, attrs, &update_mapping);
36883688
/* TODO: unmap ranges from GPU that lost access */
36893689
}
3690+
update_mapping |= !p->xnack_enabled && !list_empty(&remap_list);
3691+
36903692
list_for_each_entry_safe(prange, next, &remove_list, update_list) {
36913693
pr_debug("unlink old 0x%p prange 0x%p [0x%lx 0x%lx]\n",
36923694
prange->svms, prange, prange->start,

0 commit comments

Comments
 (0)