@@ -37,6 +37,8 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
37
37
38
38
tracker_value_t * value = umf_ba_alloc (hTracker -> tracker_allocator );
39
39
if (value == NULL ) {
40
+ LOG_ERR ("failed to allocate tracker value, ptr=%p, size=%zu" , ptr ,
41
+ size );
40
42
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
41
43
}
42
44
@@ -46,16 +48,20 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
46
48
int ret = critnib_insert (hTracker -> map , (uintptr_t )ptr , value , 0 );
47
49
48
50
if (ret == 0 ) {
51
+ LOG_DEBUG ("memory region is added, tracker=%p, ptr=%p, size=%zu" ,
52
+ (void * )hTracker , ptr , size );
49
53
return UMF_RESULT_SUCCESS ;
50
54
}
51
55
56
+ LOG_ERR ("failed to insert tracker value, ret=%d, ptr=%p, size=%zu" , ret ,
57
+ ptr , size );
58
+
52
59
umf_ba_free (hTracker -> tracker_allocator , value );
53
60
54
61
if (ret == ENOMEM ) {
55
62
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
56
63
}
57
64
58
- LOG_ERR ("umfMemoryTrackerAdd: Unknown Error %d" , ret );
59
65
return UMF_RESULT_ERROR_UNKNOWN ;
60
66
}
61
67
@@ -70,7 +76,7 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
70
76
71
77
void * value = critnib_remove (hTracker -> map , (uintptr_t )ptr );
72
78
if (!value ) {
73
- LOG_ERR ("umfMemoryTrackerRemove: pointer %p not found in the map" , ptr );
79
+ LOG_ERR ("pointer %p not found in the map" , ptr );
74
80
return UMF_RESULT_ERROR_UNKNOWN ;
75
81
}
76
82
@@ -109,6 +115,9 @@ umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
109
115
int found = critnib_find (TRACKER -> map , (uintptr_t )ptr , FIND_LE ,
110
116
(void * )& rkey , (void * * )& rvalue );
111
117
if (!found || (uintptr_t )ptr >= rkey + rvalue -> size ) {
118
+ LOG_WARN ("pointer %p not found in the "
119
+ "tracker, TRACKER=%p" ,
120
+ ptr , (void * )TRACKER );
112
121
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
113
122
}
114
123
@@ -181,20 +190,21 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
181
190
tracker_value_t * value =
182
191
(tracker_value_t * )critnib_get (provider -> hTracker -> map , (uintptr_t )ptr );
183
192
if (!value ) {
184
- LOG_ERR ("tracking split: no such value " );
193
+ LOG_ERR ("region for split is not found in the tracker " );
185
194
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
186
195
goto err ;
187
196
}
188
197
if (value -> size != totalSize ) {
189
- LOG_ERR ("tracking split: %zu != %zu" , value -> size , totalSize );
198
+ LOG_ERR ("tracked size %zu does not match requested size to split: %zu" ,
199
+ value -> size , totalSize );
190
200
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
191
201
goto err ;
192
202
}
193
203
194
204
ret = umfMemoryProviderAllocationSplit (provider -> hUpstream , ptr , totalSize ,
195
205
firstSize );
196
206
if (ret != UMF_RESULT_SUCCESS ) {
197
- LOG_ERR ("tracking split: umfMemoryProviderAllocationSplit failed" );
207
+ LOG_ERR ("umfMemoryProviderAllocationSplit failed" );
198
208
goto err ;
199
209
}
200
210
@@ -206,7 +216,7 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
206
216
ret = umfMemoryTrackerAdd (provider -> hTracker , provider -> pool , highPtr ,
207
217
secondSize );
208
218
if (ret != UMF_RESULT_SUCCESS ) {
209
- LOG_ERR ("tracking split: umfMemoryTrackerAdd failed" );
219
+ LOG_ERR ("umfMemoryTrackerAdd failed" );
210
220
// TODO: what now? should we rollback the split? This can only happen due to ENOMEM
211
221
// so it's unlikely but probably the best solution would be to try to preallocate everything
212
222
// (value and critnib nodes) before calling umfMemoryProviderAllocationSplit.
@@ -256,33 +266,32 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
256
266
tracker_value_t * lowValue = (tracker_value_t * )critnib_get (
257
267
provider -> hTracker -> map , (uintptr_t )lowPtr );
258
268
if (!lowValue ) {
259
- LOG_ERR ("tracking merge: no left value" );
269
+ LOG_ERR ("no left value" );
260
270
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
261
271
goto err ;
262
272
}
263
273
tracker_value_t * highValue = (tracker_value_t * )critnib_get (
264
274
provider -> hTracker -> map , (uintptr_t )highPtr );
265
275
if (!highValue ) {
266
- LOG_ERR ("tracking merge: no right value" );
276
+ LOG_ERR ("no right value" );
267
277
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
268
278
goto err ;
269
279
}
270
280
if (lowValue -> pool != highValue -> pool ) {
271
- LOG_ERR ("tracking merge: pool mismatch" );
281
+ LOG_ERR ("pool mismatch" );
272
282
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
273
283
goto err ;
274
284
}
275
285
if (lowValue -> size + highValue -> size != totalSize ) {
276
- LOG_ERR ("tracking merge: lowValue->size + highValue->size != "
277
- "totalSize" );
286
+ LOG_ERR ("lowValue->size + highValue->size != totalSize" );
278
287
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
279
288
goto err ;
280
289
}
281
290
282
291
ret = umfMemoryProviderAllocationMerge (provider -> hUpstream , lowPtr , highPtr ,
283
292
totalSize );
284
293
if (ret != UMF_RESULT_SUCCESS ) {
285
- LOG_ERR ("tracking merge: umfMemoryProviderAllocationMerge failed" );
294
+ LOG_ERR ("umfMemoryProviderAllocationMerge failed" );
286
295
goto err ;
287
296
}
288
297
@@ -338,17 +347,17 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
338
347
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
339
348
cache_value -> providerIpcData );
340
349
if (ret != UMF_RESULT_SUCCESS ) {
341
- LOG_ERR ("tracking free: failed to put IPC handle" );
350
+ LOG_ERR ("failed to put IPC handle" );
342
351
}
343
352
umf_ba_global_free (value );
344
353
}
345
354
346
355
ret = umfMemoryProviderFree (p -> hUpstream , ptr , size );
347
356
if (ret != UMF_RESULT_SUCCESS ) {
348
- LOG_ERR ("tracking free: umfMemoryProviderFree failed" );
357
+ LOG_ERR ("umfMemoryProviderFree failed" );
349
358
if (umfMemoryTrackerAdd (p -> hTracker , p -> pool , ptr , size ) !=
350
359
UMF_RESULT_SUCCESS ) {
351
- LOG_ERR ("tracking free: umfMemoryTrackerAdd failed" );
360
+ LOG_ERR ("umfMemoryTrackerAdd failed" );
352
361
}
353
362
return ret ;
354
363
}
@@ -485,34 +494,29 @@ static umf_result_t trackingGetIpcHandle(void *provider, const void *ptr,
485
494
ret = umfMemoryProviderGetIPCHandle (p -> hUpstream , ptr , size ,
486
495
providerIpcData );
487
496
if (ret != UMF_RESULT_SUCCESS ) {
488
- LOG_ERR ("tracking get ipc handle: "
489
- "umfMemoryProviderGetIPCHandle failed" );
497
+ LOG_ERR ("umfMemoryProviderGetIPCHandle failed" );
490
498
return ret ;
491
499
}
492
500
493
501
ret = umfMemoryProviderGetIPCHandleSize (p -> hUpstream , & ipcDataSize );
494
502
if (ret != UMF_RESULT_SUCCESS ) {
495
- LOG_ERR ("tracking get ipc handle: "
496
- "umfMemoryProviderGetIPCHandleSize failed" );
503
+ LOG_ERR ("umfMemoryProviderGetIPCHandleSize failed" );
497
504
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
498
505
providerIpcData );
499
506
if (ret != UMF_RESULT_SUCCESS ) {
500
- LOG_ERR ("tracking get ipc handle: "
501
- "umfMemoryProviderPutIPCHandle failed" );
507
+ LOG_ERR ("umfMemoryProviderPutIPCHandle failed" );
502
508
}
503
509
return ret ;
504
510
}
505
511
506
512
size_t value_size = sizeof (ipc_cache_value_t ) + ipcDataSize ;
507
513
ipc_cache_value_t * cache_value = umf_ba_global_alloc (value_size );
508
514
if (!cache_value ) {
509
- LOG_ERR (
510
- "tracking get ipc handle: failed to allocate cache_value" );
515
+ LOG_ERR ("failed to allocate cache_value" );
511
516
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
512
517
providerIpcData );
513
518
if (ret != UMF_RESULT_SUCCESS ) {
514
- LOG_ERR ("tracking get ipc handle: "
515
- "umfMemoryProviderPutIPCHandle failed" );
519
+ LOG_ERR ("umfMemoryProviderPutIPCHandle failed" );
516
520
}
517
521
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
518
522
}
@@ -538,13 +542,11 @@ static umf_result_t trackingGetIpcHandle(void *provider, const void *ptr,
538
542
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
539
543
providerIpcData );
540
544
if (ret != UMF_RESULT_SUCCESS ) {
541
- LOG_ERR ("tracking get ipc handle: "
542
- "umfMemoryProviderPutIPCHandle failed" );
545
+ LOG_ERR ("umfMemoryProviderPutIPCHandle failed" );
543
546
return ret ;
544
547
}
545
548
if (insRes == ENOMEM ) {
546
- LOG_ERR (
547
- "tracking get ipc handle: insert to IPC cache failed" );
549
+ LOG_ERR ("insert to IPC cache failed" );
548
550
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
549
551
}
550
552
}
@@ -585,13 +587,17 @@ static umf_result_t trackingOpenIpcHandle(void *provider, void *providerIpcData,
585
587
586
588
ret = umfMemoryProviderOpenIPCHandle (p -> hUpstream , providerIpcData , ptr );
587
589
if (ret != UMF_RESULT_SUCCESS ) {
590
+ LOG_ERR ("umfMemoryProviderOpenIPCHandle failed" );
588
591
return ret ;
589
592
}
590
593
size_t bufferSize = getDataSizeFromIpcHandle (providerIpcData );
591
594
ret = umfMemoryTrackerAdd (p -> hTracker , p -> pool , * ptr , bufferSize );
592
595
if (ret != UMF_RESULT_SUCCESS ) {
596
+ LOG_ERR ("umfMemoryTrackerAdd failed, ptr=%p, size=%zu" , * ptr ,
597
+ bufferSize );
593
598
if (umfMemoryProviderCloseIPCHandle (p -> hUpstream , * ptr , bufferSize )) {
594
- // TODO: LOG
599
+ LOG_ERR ("umfMemoryProviderCloseIPCHandle failed, ptr=%p, size=%zu" ,
600
+ * ptr , bufferSize );
595
601
}
596
602
}
597
603
return ret ;
@@ -611,7 +617,8 @@ static umf_result_t trackingCloseIpcHandle(void *provider, void *ptr,
611
617
if (ret != UMF_RESULT_SUCCESS ) {
612
618
// DO NOT return an error here, because the tracking provider
613
619
// cannot change behaviour of the upstream provider.
614
- LOG_ERR ("tracking free: umfMemoryTrackerRemove failed" );
620
+ LOG_ERR ("umfMemoryTrackerRemove failed, ptr=%p, size=%zu" , ptr ,
621
+ size );
615
622
}
616
623
}
617
624
return umfMemoryProviderCloseIPCHandle (p -> hUpstream , ptr , size );
@@ -645,14 +652,21 @@ umf_result_t umfTrackingMemoryProviderCreate(
645
652
params .hUpstream = hUpstream ;
646
653
params .hTracker = TRACKER ;
647
654
if (!params .hTracker ) {
655
+ LOG_ERR ("failed, TRACKER is NULL" );
648
656
return UMF_RESULT_ERROR_UNKNOWN ;
649
657
}
650
658
params .pool = hPool ;
651
659
params .ipcCache = critnib_new ();
652
660
if (!params .ipcCache ) {
661
+ LOG_ERR ("failed to create IPC cache" );
653
662
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
654
663
}
655
664
665
+ LOG_DEBUG ("upstream=%p, tracker=%p, "
666
+ "pool=%p, ipcCache=%p" ,
667
+ (void * )params .hUpstream , (void * )params .hTracker ,
668
+ (void * )params .pool , (void * )params .ipcCache );
669
+
656
670
return umfMemoryProviderCreate (& UMF_TRACKING_MEMORY_PROVIDER_OPS , & params ,
657
671
hTrackingProvider );
658
672
}
@@ -691,6 +705,9 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
691
705
goto err_destroy_mutex ;
692
706
}
693
707
708
+ LOG_DEBUG ("tracker created, handle=%p, segment map=%p" , (void * )handle ,
709
+ (void * )handle -> map );
710
+
694
711
return handle ;
695
712
696
713
err_destroy_mutex :
0 commit comments