@@ -2004,7 +2004,8 @@ HSAKMT_STATUS hsakmt_fmm_release(void *address)
20042004}
20052005
20062006static int fmm_set_memory_policy (uint32_t gpu_id , int default_policy , int alt_policy ,
2007- uintptr_t alt_base , uint64_t alt_size )
2007+ uintptr_t alt_base , uint64_t alt_size ,
2008+ uint32_t misc_process_flags )
20082009{
20092010 struct kfd_ioctl_set_memory_policy_args args = {0 };
20102011
@@ -2013,6 +2014,7 @@ static int fmm_set_memory_policy(uint32_t gpu_id, int default_policy, int alt_po
20132014 args .alternate_policy = alt_policy ;
20142015 args .alternate_aperture_base = alt_base ;
20152016 args .alternate_aperture_size = alt_size ;
2017+ args .misc_process_flag = misc_process_flags ;
20162018
20172019 return hsakmt_ioctl (hsakmt_kfd_fd , AMDKFD_IOC_SET_MEMORY_POLICY , & args );
20182020}
@@ -2517,10 +2519,10 @@ HSAKMT_STATUS hsakmt_fmm_init_process_apertures(unsigned int NumNodes)
25172519 uint32_t num_of_sysfs_nodes ;
25182520 HSAKMT_STATUS ret = HSAKMT_STATUS_SUCCESS ;
25192521 char * disableCache , * pagedUserptr , * checkUserptr , * guardPagesStr , * reserveSvm ;
2520- char * maxVaAlignStr ;
2522+ char * maxVaAlignStr , * mfmaHighPrecisionModeStr ;
25212523 unsigned int guardPages = 1 ;
25222524 uint64_t svm_base = 0 , svm_limit = 0 ;
2523- uint32_t svm_alignment = 0 ;
2525+ uint32_t svm_alignment = 0 , mfma_high_precision_mode = 0 ;
25242526
25252527 /* If HSA_DISABLE_CACHE is set to a non-0 value, disable caching */
25262528 disableCache = getenv ("HSA_DISABLE_CACHE" );
@@ -2549,6 +2551,9 @@ HSAKMT_STATUS hsakmt_fmm_init_process_apertures(unsigned int NumNodes)
25492551 if (!guardPagesStr || sscanf (guardPagesStr , "%u" , & guardPages ) != 1 )
25502552 guardPages = 1 ;
25512553
2554+ mfmaHighPrecisionModeStr = getenv ("HSA_HIGH_PRECISION_MODE" );
2555+ mfma_high_precision_mode = (mfmaHighPrecisionModeStr &&
2556+ strcmp (mfmaHighPrecisionModeStr , "0" ));
25522557 /* Sets the max VA alignment order size during mapping. By default the order
25532558 * size is set to 18(1G) for GFX950 to reduce TLB hits. If any non-gfx950
25542559 * ASIC is found in the system, set back to 9(2MB).
@@ -2800,7 +2805,9 @@ HSAKMT_STATUS hsakmt_fmm_init_process_apertures(unsigned int NumNodes)
28002805 KFD_IOC_CACHE_POLICY_COHERENT :
28012806 KFD_IOC_CACHE_POLICY_NONCOHERENT ,
28022807 KFD_IOC_CACHE_POLICY_COHERENT ,
2803- alt_base , alt_size );
2808+ alt_base , alt_size ,
2809+ hsakmt_get_gfxv_by_node_id (i ) == GFX_VERSION_GFX950 ?
2810+ mfma_high_precision_mode : 0 );
28042811 if (err ) {
28052812 pr_err ("Failed to set mem policy for GPU [0x%x]\n" ,
28062813 process_apertures [i ].gpu_id );
0 commit comments