@@ -360,6 +360,22 @@ validatePartitions(umf_os_memory_provider_params_t *params) {
360360 return UMF_RESULT_SUCCESS ;
361361}
362362
363+ static umf_result_t os_get_min_page_size (void * provider , void * ptr ,
364+ size_t * page_size );
365+
366+ static umf_result_t validatePartSize (os_memory_provider_t * provider ,
367+ umf_os_memory_provider_params_t * params ) {
368+ size_t page_size ;
369+ os_get_min_page_size (provider , NULL , & page_size );
370+ if (ALIGN_UP (params -> part_size , page_size ) < params -> part_size ) {
371+ LOG_ERR ("partition size (%zu) is too big, cannot align with a page "
372+ "size (%zu)" ,
373+ params -> part_size , page_size );
374+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
375+ }
376+ return UMF_RESULT_SUCCESS ;
377+ }
378+
363379static void free_bitmaps (os_memory_provider_t * provider ) {
364380 for (unsigned i = 0 ; i < provider -> nodeset_len ; i ++ ) {
365381 hwloc_bitmap_free (provider -> nodeset [i ]);
@@ -443,6 +459,14 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
443459 return result ;
444460 }
445461
462+ if (in_params -> numa_mode == UMF_NUMA_MODE_INTERLEAVE ) {
463+ result = validatePartSize (provider , in_params );
464+ if (result != UMF_RESULT_SUCCESS ) {
465+ LOG_ERR ("incorrect partition size: %zu" , in_params -> part_size );
466+ return result ;
467+ }
468+ }
469+
446470 int is_dedicated_node_bind = dedicated_node_bind (in_params );
447471 provider -> numa_policy =
448472 translate_numa_mode (in_params -> numa_mode , is_dedicated_node_bind );
@@ -578,9 +602,6 @@ static void os_finalize(void *provider) {
578602 umf_ba_global_free (os_provider );
579603}
580604
581- static umf_result_t os_get_min_page_size (void * provider , void * ptr ,
582- size_t * page_size );
583-
584605// TODO: this function should be reenabled when CTL is implemented
585606#if 0
586607static void print_numa_nodes (os_memory_provider_t * os_provider , void * addr ,
0 commit comments