@@ -175,6 +175,13 @@ static umf_result_t umfDefaultGetAllocationPropertiesSize(
175175 return UMF_RESULT_ERROR_NOT_SUPPORTED ;
176176}
177177
178+ static umf_result_t umfDefaultGetCacheLineSize (void * provider , size_t * size ) {
179+ (void )provider ;
180+
181+ * size = 64 ;
182+ return UMF_RESULT_SUCCESS ;
183+ }
184+
178185void assignOpsExtDefaults (umf_memory_provider_ops_t * ops ) {
179186 if (!ops -> ext_purge_lazy ) {
180187 ops -> ext_purge_lazy = umfDefaultPurgeLazy ;
@@ -263,6 +270,7 @@ static bool validateOps(const umf_memory_provider_ops_t *ops) {
263270 CHECK_OP (ops , free );
264271 CHECK_OP (ops , get_recommended_page_size );
265272 CHECK_OP (ops , get_min_page_size );
273+ CHECK_OP (ops , get_cache_line_size );
266274 CHECK_OP (ops , initialize );
267275 CHECK_OP (ops , finalize );
268276 CHECK_OP (ops , get_last_native_error );
@@ -321,6 +329,13 @@ umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
321329 memcpy (& compatible_ops , ops ,
322330 offsetof(umf_memory_provider_ops_t ,
323331 ext_get_allocation_properties ));
332+ compatible_ops .get_cache_line_size = umfDefaultGetCacheLineSize ;
333+ } else if (UMF_MINOR_VERSION (ops -> version ) == 1 ) {
334+ LOG_INFO ("Detected 1.1 version of Memory Provider ops, "
335+ "upgrading to current version" );
336+ memcpy (& compatible_ops , ops ,
337+ offsetof(umf_memory_provider_ops_t , get_cache_line_size ));
338+ compatible_ops .get_cache_line_size = umfDefaultGetCacheLineSize ;
324339 } else {
325340 LOG_ERR ("Unsupported Memory Provider ops version: %d" ,
326341 ops -> version );
@@ -479,6 +494,19 @@ umfMemoryProviderGetMinPageSize(umf_memory_provider_handle_t hProvider,
479494 return res ;
480495}
481496
497+ umf_result_t
498+ umfMemoryProviderGetCacheLineSize (umf_memory_provider_handle_t hProvider ,
499+ size_t * size ) {
500+ UMF_CHECK ((hProvider != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
501+ UMF_CHECK ((size != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
502+
503+ umf_result_t res =
504+ hProvider -> ops .get_cache_line_size (hProvider -> provider_priv , size );
505+
506+ checkErrorAndSetLastProvider (res , hProvider );
507+ return res ;
508+ }
509+
482510umf_result_t umfMemoryProviderGetName (umf_memory_provider_handle_t hProvider ,
483511 const char * * name ) {
484512 UMF_CHECK ((hProvider != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
0 commit comments