This reverts commit 448ee45353ef9fb1a34f5f26eb3f48923c6f0898. This causes GPU pagefaults in some HIP applications.
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4914 Cc: Xiaogang Chen <[email protected]> Cc: Philip Yang <[email protected]> Signed-off-by: Alex Deucher <[email protected]> --- drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 46 +++++++++------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c index fcddb54a439f9..bbca6d61a35b4 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -1145,48 +1145,30 @@ static int svm_range_split_tail(struct svm_range *prange, uint64_t new_last, struct list_head *insert_list, struct list_head *remap_list) { - unsigned long last_align_down = ALIGN_DOWN(prange->last, 512); - unsigned long start_align = ALIGN(prange->start, 512); - bool huge_page_mapping = last_align_down > start_align; struct svm_range *tail = NULL; - int r; - - r = svm_range_split(prange, prange->start, new_last, &tail); - - if (r) - return r; + int r = svm_range_split(prange, prange->start, new_last, &tail); - list_add(&tail->list, insert_list); - - if (huge_page_mapping && tail->start > start_align && - tail->start < last_align_down && (!IS_ALIGNED(tail->start, 512))) - list_add(&tail->update_list, remap_list); - - return 0; + if (!r) { + list_add(&tail->list, insert_list); + if (!IS_ALIGNED(new_last + 1, 1UL << prange->granularity)) + list_add(&tail->update_list, remap_list); + } + return r; } static int svm_range_split_head(struct svm_range *prange, uint64_t new_start, struct list_head *insert_list, struct list_head *remap_list) { - unsigned long last_align_down = ALIGN_DOWN(prange->last, 512); - unsigned long start_align = ALIGN(prange->start, 512); - bool huge_page_mapping = last_align_down > start_align; struct svm_range *head = NULL; - int r; - - r = svm_range_split(prange, new_start, prange->last, &head); - - if (r) - return r; + int r = svm_range_split(prange, new_start, prange->last, &head); - list_add(&head->list, insert_list); - - if (huge_page_mapping && head->last + 1 > start_align && - head->last + 1 < last_align_down && (!IS_ALIGNED(head->last, 512))) - list_add(&head->update_list, remap_list); - - return 0; + if (!r) { + list_add(&head->list, insert_list); + if (!IS_ALIGNED(new_start, 1UL << prange->granularity)) + list_add(&head->update_list, remap_list); + } + return r; } static void -- 2.53.0
