@@ -267,58 +267,6 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
267
267
return ret ;
268
268
}
269
269
270
- // shrink (or remove) an entry in the tracker and return the totalSize of the original entry
271
- umf_result_t trackerShrinkEntry (void * hProvider , void * ptr , size_t shrinkSize ,
272
- size_t * totalSize ) {
273
- umf_result_t ret = UMF_RESULT_SUCCESS ;
274
- umf_tracking_memory_provider_t * provider =
275
- (umf_tracking_memory_provider_t * )hProvider ;
276
-
277
- int r = utils_mutex_lock (& provider -> hTracker -> splitMergeMutex );
278
- if (r ) {
279
- return UMF_RESULT_ERROR_UNKNOWN ;
280
- }
281
-
282
- tracker_alloc_info_t * value = (tracker_alloc_info_t * )critnib_get (
283
- provider -> hTracker -> alloc_segments_map , (uintptr_t )ptr );
284
- if (!value ) {
285
- LOG_ERR ("region for shrinking is not found in the tracker" );
286
- ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
287
- goto err ;
288
- }
289
- if (shrinkSize > value -> size ) {
290
- LOG_ERR ("requested size %zu to shrink exceeds the tracked size %zu" ,
291
- shrinkSize , value -> size );
292
- ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
293
- goto err ;
294
- }
295
-
296
- if (shrinkSize < value -> size ) {
297
- void * highPtr = (void * )(((uintptr_t )ptr ) + shrinkSize );
298
- size_t secondSize = value -> size - shrinkSize ;
299
- ret = umfMemoryTrackerAdd (provider -> hTracker , provider -> pool , highPtr ,
300
- secondSize );
301
- if (ret != UMF_RESULT_SUCCESS ) {
302
- LOG_ERR ("failed to add the new shrunk region to the tracker, ptr = "
303
- "%p, size = %zu, ret = %d" ,
304
- highPtr , secondSize , ret );
305
- goto err ;
306
- }
307
- }
308
-
309
- * totalSize = value -> size ;
310
-
311
- void * erasedValue =
312
- critnib_remove (provider -> hTracker -> alloc_segments_map , (uintptr_t )ptr );
313
- assert (erasedValue == value );
314
- umf_ba_free (provider -> hTracker -> alloc_info_allocator , erasedValue );
315
-
316
- err :
317
- utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
318
-
319
- return ret ;
320
- }
321
-
322
270
static umf_result_t trackingAllocationMerge (void * hProvider , void * lowPtr ,
323
271
void * highPtr , size_t totalSize ) {
324
272
umf_result_t ret = UMF_RESULT_ERROR_UNKNOWN ;
@@ -405,65 +353,6 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
405
353
return ret ;
406
354
}
407
355
408
- // grow (or add) an entry in the tracker to its original size
409
- umf_result_t trackerGrowEntry (void * hProvider , void * ptr , size_t growSize ,
410
- size_t origSize ) {
411
- umf_result_t ret = UMF_RESULT_SUCCESS ;
412
- umf_tracking_memory_provider_t * provider =
413
- (umf_tracking_memory_provider_t * )hProvider ;
414
-
415
- if (growSize > origSize ) {
416
- LOG_ERR ("Invalid grow size %zu (larger than the original size %zu)" ,
417
- growSize , origSize );
418
- return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
419
- }
420
-
421
- int r = utils_mutex_lock (& provider -> hTracker -> splitMergeMutex );
422
- if (r ) {
423
- return UMF_RESULT_ERROR_UNKNOWN ;
424
- }
425
-
426
- void * highPtr = (void * )(((uintptr_t )ptr ) + growSize );
427
- tracker_alloc_info_t * highValue = NULL ;
428
-
429
- if (growSize < origSize ) {
430
- highValue = (tracker_alloc_info_t * )critnib_get (
431
- provider -> hTracker -> alloc_segments_map , (uintptr_t )highPtr );
432
- if (!highValue ) {
433
- LOG_ERR ("cannot find the tracker entry to grow %p" , highPtr );
434
- ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
435
- goto err ;
436
- }
437
- if (growSize + highValue -> size != origSize ) {
438
- LOG_ERR ("Grow size plus the current size does not equal the "
439
- "original size" );
440
- ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
441
- goto err ;
442
- }
443
- }
444
-
445
- ret =
446
- umfMemoryTrackerAdd (provider -> hTracker , provider -> pool , ptr , origSize );
447
- if (ret != UMF_RESULT_SUCCESS ) {
448
- LOG_ERR ("failed to add the new grown region to the tracker, ptr = %p, "
449
- "size = %zu, ret = %d" ,
450
- ptr , origSize , ret );
451
- goto err ;
452
- }
453
-
454
- if (growSize < origSize ) {
455
- void * erasedhighValue = critnib_remove (
456
- provider -> hTracker -> alloc_segments_map , (uintptr_t )highPtr );
457
- assert (erasedhighValue == highValue );
458
- umf_ba_free (provider -> hTracker -> alloc_info_allocator , erasedhighValue );
459
- }
460
-
461
- err :
462
- utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
463
-
464
- return ret ;
465
- }
466
-
467
356
static umf_result_t trackingFree (void * hProvider , void * ptr , size_t size ) {
468
357
umf_result_t ret ;
469
358
umf_result_t ret_remove = UMF_RESULT_ERROR_UNKNOWN ;
@@ -980,3 +869,47 @@ void umfMemoryTrackerDestroy(umf_memory_tracker_handle_t handle) {
980
869
handle -> alloc_info_allocator = NULL ;
981
870
umf_ba_global_free (handle );
982
871
}
872
+
873
+ // add an entry to the tracker
874
+ umf_result_t trackerAddEntry (void * hProvider , void * ptr , size_t size ) {
875
+ umf_tracking_memory_provider_t * provider =
876
+ (umf_tracking_memory_provider_t * )hProvider ;
877
+ return umfMemoryTrackerAdd (provider -> hTracker , provider -> pool , ptr , size );
878
+ }
879
+
880
+ // remove an entry from the tracker
881
+ umf_result_t trackerRemoveEntry (void * hProvider , void * ptr , size_t size ) {
882
+ umf_result_t ret = UMF_RESULT_SUCCESS ;
883
+ umf_tracking_memory_provider_t * provider =
884
+ (umf_tracking_memory_provider_t * )hProvider ;
885
+
886
+ int r = utils_mutex_lock (& provider -> hTracker -> splitMergeMutex );
887
+ if (r ) {
888
+ return UMF_RESULT_ERROR_UNKNOWN ;
889
+ }
890
+
891
+ tracker_alloc_info_t * value = (tracker_alloc_info_t * )critnib_get (
892
+ provider -> hTracker -> alloc_segments_map , (uintptr_t )ptr );
893
+ if (!value ) {
894
+ LOG_ERR ("region for removing was not found in the tracker" );
895
+ ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
896
+ goto err ;
897
+ }
898
+ if (size != value -> size ) {
899
+ LOG_ERR (
900
+ "requested size %zu to remove does not match the tracked size %zu" ,
901
+ size , value -> size );
902
+ ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
903
+ goto err ;
904
+ }
905
+
906
+ void * erasedValue =
907
+ critnib_remove (provider -> hTracker -> alloc_segments_map , (uintptr_t )ptr );
908
+ assert (erasedValue == value );
909
+ umf_ba_free (provider -> hTracker -> alloc_info_allocator , erasedValue );
910
+
911
+ err :
912
+ utils_mutex_unlock (& provider -> hTracker -> splitMergeMutex );
913
+
914
+ return ret ;
915
+ }
0 commit comments