@@ -341,6 +341,22 @@ validatePartitions(umf_os_memory_provider_params_t *params) {
341341 return UMF_RESULT_SUCCESS ;
342342}
343343
344+ static umf_result_t os_get_min_page_size (void * provider , void * ptr ,
345+ size_t * page_size );
346+
347+ static umf_result_t validatePartSize (os_memory_provider_t * provider ,
348+ umf_os_memory_provider_params_t * params ) {
349+ size_t page_size ;
350+ os_get_min_page_size (provider , NULL , & page_size );
351+ if (ALIGN_UP (params -> part_size , page_size ) < params -> part_size ) {
352+ LOG_ERR ("partition size (%zu) is too big, cannot align with a page "
353+ "size (%zu)" ,
354+ params -> part_size , page_size );
355+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
356+ }
357+ return UMF_RESULT_SUCCESS ;
358+ }
359+
344360static void free_bitmaps (os_memory_provider_t * provider ) {
345361 for (unsigned i = 0 ; i < provider -> nodeset_len ; i ++ ) {
346362 hwloc_bitmap_free (provider -> nodeset [i ]);
@@ -427,6 +443,14 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
427443 return result ;
428444 }
429445
446+ if (in_params -> numa_mode == UMF_NUMA_MODE_INTERLEAVE ) {
447+ result = validatePartSize (provider , in_params );
448+ if (result != UMF_RESULT_SUCCESS ) {
449+ LOG_ERR ("incorrect partition size: %zu" , in_params -> part_size );
450+ return result ;
451+ }
452+ }
453+
430454 int is_dedicated_node_bind = dedicated_node_bind (in_params );
431455 provider -> numa_policy =
432456 translate_numa_mode (in_params -> numa_mode , is_dedicated_node_bind );
@@ -574,9 +598,6 @@ static void os_finalize(void *provider) {
574598 umf_ba_global_free (os_provider );
575599}
576600
577- static umf_result_t os_get_min_page_size (void * provider , void * ptr ,
578- size_t * page_size );
579-
580601// TODO: this function should be re-enabled when CTL is implemented
581602#if 0
582603static void print_numa_nodes (os_memory_provider_t * os_provider , void * addr ,
0 commit comments