@@ -1057,7 +1057,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
10571057 struct amdkfd_process_info * process_info = mem -> process_info ;
10581058 struct amdgpu_bo * bo = mem -> bo ;
10591059 struct ttm_operation_ctx ctx = { true, false };
1060- struct hmm_range * range ;
1060+ struct amdgpu_hmm_range * range ;
10611061 int ret = 0 ;
10621062
10631063 mutex_lock (& process_info -> lock );
@@ -1089,8 +1089,15 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
10891089 return 0 ;
10901090 }
10911091
1092- ret = amdgpu_ttm_tt_get_user_pages (bo , & range );
1092+ range = amdgpu_hmm_range_alloc (NULL );
1093+ if (unlikely (!range )) {
1094+ ret = - ENOMEM ;
1095+ goto unregister_out ;
1096+ }
1097+
1098+ ret = amdgpu_ttm_tt_get_user_pages (bo , range );
10931099 if (ret ) {
1100+ amdgpu_hmm_range_free (range );
10941101 if (ret == - EAGAIN )
10951102 pr_debug ("Failed to get user pages, try again\n" );
10961103 else
@@ -1113,7 +1120,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
11131120 amdgpu_bo_unreserve (bo );
11141121
11151122release_out :
1116- amdgpu_ttm_tt_get_user_pages_done ( bo -> tbo . ttm , range );
1123+ amdgpu_hmm_range_free ( range );
11171124unregister_out :
11181125 if (ret )
11191126 amdgpu_hmm_unregister (bo );
@@ -1916,7 +1923,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
19161923 if (amdgpu_ttm_tt_get_usermm (mem -> bo -> tbo .ttm )) {
19171924 amdgpu_hmm_unregister (mem -> bo );
19181925 mutex_lock (& process_info -> notifier_lock );
1919- amdgpu_ttm_tt_discard_user_pages ( mem -> bo -> tbo . ttm , mem -> range );
1926+ amdgpu_hmm_range_free ( mem -> range );
19201927 mutex_unlock (& process_info -> notifier_lock );
19211928 }
19221929
@@ -1954,9 +1961,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
19541961 */
19551962 if (size ) {
19561963 if (!is_imported &&
1957- (mem -> bo -> preferred_domains == AMDGPU_GEM_DOMAIN_VRAM ||
1958- (adev -> apu_prefer_gtt &&
1959- mem -> bo -> preferred_domains == AMDGPU_GEM_DOMAIN_GTT )))
1964+ mem -> alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM )
19601965 * size = bo_size ;
19611966 else
19621967 * size = 0 ;
@@ -2542,7 +2547,7 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info,
25422547
25432548 bo = mem -> bo ;
25442549
2545- amdgpu_ttm_tt_discard_user_pages ( bo -> tbo . ttm , mem -> range );
2550+ amdgpu_hmm_range_free ( mem -> range );
25462551 mem -> range = NULL ;
25472552
25482553 /* BO reservations and getting user pages (hmm_range_fault)
@@ -2566,9 +2571,14 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info,
25662571 }
25672572 }
25682573
2574+ mem -> range = amdgpu_hmm_range_alloc (NULL );
2575+ if (unlikely (!mem -> range ))
2576+ return - ENOMEM ;
25692577 /* Get updated user pages */
2570- ret = amdgpu_ttm_tt_get_user_pages (bo , & mem -> range );
2578+ ret = amdgpu_ttm_tt_get_user_pages (bo , mem -> range );
25712579 if (ret ) {
2580+ amdgpu_hmm_range_free (mem -> range );
2581+ mem -> range = NULL ;
25722582 pr_debug ("Failed %d to get user pages\n" , ret );
25732583
25742584 /* Return -EFAULT bad address error as success. It will
@@ -2741,8 +2751,8 @@ static int confirm_valid_user_pages_locked(struct amdkfd_process_info *process_i
27412751 continue ;
27422752
27432753 /* Only check mem with hmm range associated */
2744- valid = amdgpu_ttm_tt_get_user_pages_done (
2745- mem -> bo -> tbo . ttm , mem -> range );
2754+ valid = amdgpu_hmm_range_valid ( mem -> range );
2755+ amdgpu_hmm_range_free ( mem -> range );
27462756
27472757 mem -> range = NULL ;
27482758 if (!valid ) {
0 commit comments