@@ -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
@@ -151,7 +160,9 @@ static umf_result_t trackingAlloc(void *hProvider, size_t size,
151
160
152
161
umf_result_t ret2 = umfMemoryTrackerAdd (p -> hTracker , p -> pool , * ptr , size );
153
162
if (ret2 != UMF_RESULT_SUCCESS ) {
154
- LOG_ERR ("umfMemoryTrackerAdd failed: %d" , ret2 );
163
+ LOG_ERR ("failed to add allocated region to the tracker, ptr = %p, size "
164
+ "= %zu, ret = %d" ,
165
+ * ptr , size , ret2 );
155
166
}
156
167
157
168
return ret ;
@@ -181,20 +192,21 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
181
192
tracker_value_t * value =
182
193
(tracker_value_t * )critnib_get (provider -> hTracker -> map , (uintptr_t )ptr );
183
194
if (!value ) {
184
- LOG_ERR ("tracking split: no such value " );
195
+ LOG_ERR ("region for split is not found in the tracker " );
185
196
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
186
197
goto err ;
187
198
}
188
199
if (value -> size != totalSize ) {
189
- LOG_ERR ("tracking split: %zu != %zu" , value -> size , totalSize );
200
+ LOG_ERR ("tracked size %zu does not match requested size to split: %zu" ,
201
+ value -> size , totalSize );
190
202
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
191
203
goto err ;
192
204
}
193
205
194
206
ret = umfMemoryProviderAllocationSplit (provider -> hUpstream , ptr , totalSize ,
195
207
firstSize );
196
208
if (ret != UMF_RESULT_SUCCESS ) {
197
- LOG_ERR ("tracking split: umfMemoryProviderAllocationSplit failed " );
209
+ LOG_ERR ("upstream provider failed to split the region " );
198
210
goto err ;
199
211
}
200
212
@@ -206,7 +218,9 @@ static umf_result_t trackingAllocationSplit(void *hProvider, void *ptr,
206
218
ret = umfMemoryTrackerAdd (provider -> hTracker , provider -> pool , highPtr ,
207
219
secondSize );
208
220
if (ret != UMF_RESULT_SUCCESS ) {
209
- LOG_ERR ("tracking split: umfMemoryTrackerAdd failed" );
221
+ LOG_ERR ("failed to add split region to the tracker, ptr = %p, size "
222
+ "= %zu, ret = %d" ,
223
+ highPtr , secondSize , ret );
210
224
// TODO: what now? should we rollback the split? This can only happen due to ENOMEM
211
225
// so it's unlikely but probably the best solution would be to try to preallocate everything
212
226
// (value and critnib nodes) before calling umfMemoryProviderAllocationSplit.
@@ -256,33 +270,32 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
256
270
tracker_value_t * lowValue = (tracker_value_t * )critnib_get (
257
271
provider -> hTracker -> map , (uintptr_t )lowPtr );
258
272
if (!lowValue ) {
259
- LOG_ERR ("tracking merge: no left value" );
273
+ LOG_ERR ("no left value" );
260
274
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
261
275
goto err ;
262
276
}
263
277
tracker_value_t * highValue = (tracker_value_t * )critnib_get (
264
278
provider -> hTracker -> map , (uintptr_t )highPtr );
265
279
if (!highValue ) {
266
- LOG_ERR ("tracking merge: no right value" );
280
+ LOG_ERR ("no right value" );
267
281
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
268
282
goto err ;
269
283
}
270
284
if (lowValue -> pool != highValue -> pool ) {
271
- LOG_ERR ("tracking merge: pool mismatch" );
285
+ LOG_ERR ("pool mismatch" );
272
286
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
273
287
goto err ;
274
288
}
275
289
if (lowValue -> size + highValue -> size != totalSize ) {
276
- LOG_ERR ("tracking merge: lowValue->size + highValue->size != "
277
- "totalSize" );
290
+ LOG_ERR ("lowValue->size + highValue->size != totalSize" );
278
291
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT ;
279
292
goto err ;
280
293
}
281
294
282
295
ret = umfMemoryProviderAllocationMerge (provider -> hUpstream , lowPtr , highPtr ,
283
296
totalSize );
284
297
if (ret != UMF_RESULT_SUCCESS ) {
285
- LOG_ERR ("tracking merge: umfMemoryProviderAllocationMerge failed" );
298
+ LOG_ERR ("upstream provider failed to merge regions " );
286
299
goto err ;
287
300
}
288
301
@@ -328,7 +341,9 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
328
341
if (ret != UMF_RESULT_SUCCESS ) {
329
342
// DO NOT return an error here, because the tracking provider
330
343
// cannot change behaviour of the upstream provider.
331
- // TODO: LOG
344
+ LOG_ERR ("failed to remove the region from the tracker, ptr=%p, "
345
+ "size=%zu, ret = %d" ,
346
+ ptr , size , ret );
332
347
}
333
348
}
334
349
@@ -338,17 +353,21 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
338
353
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
339
354
cache_value -> providerIpcData );
340
355
if (ret != UMF_RESULT_SUCCESS ) {
341
- LOG_ERR ("tracking free: failed to put IPC handle" );
356
+ LOG_ERR ("upstream provider is failed to put IPC handle, ptr=%p, "
357
+ "size=%zu, ret = %d" ,
358
+ ptr , size , ret );
342
359
}
343
360
umf_ba_global_free (value );
344
361
}
345
362
346
363
ret = umfMemoryProviderFree (p -> hUpstream , ptr , size );
347
364
if (ret != UMF_RESULT_SUCCESS ) {
348
- LOG_ERR ("tracking free: umfMemoryProviderFree failed" );
365
+ LOG_ERR ("upstream provider is failed to free the memory " );
349
366
if (umfMemoryTrackerAdd (p -> hTracker , p -> pool , ptr , size ) !=
350
367
UMF_RESULT_SUCCESS ) {
351
- LOG_ERR ("tracking free: umfMemoryTrackerAdd failed" );
368
+ LOG_ERR (
369
+ "cannot add memory back to the tracker, ptr = %p, size = %zu" ,
370
+ ptr , size );
352
371
}
353
372
return ret ;
354
373
}
@@ -485,34 +504,30 @@ static umf_result_t trackingGetIpcHandle(void *provider, const void *ptr,
485
504
ret = umfMemoryProviderGetIPCHandle (p -> hUpstream , ptr , size ,
486
505
providerIpcData );
487
506
if (ret != UMF_RESULT_SUCCESS ) {
488
- LOG_ERR ("tracking get ipc handle: "
489
- "umfMemoryProviderGetIPCHandle failed" );
507
+ LOG_ERR ("upstream provider is failed to get IPC handle" );
490
508
return ret ;
491
509
}
492
510
493
511
ret = umfMemoryProviderGetIPCHandleSize (p -> hUpstream , & ipcDataSize );
494
512
if (ret != UMF_RESULT_SUCCESS ) {
495
- LOG_ERR ("tracking get ipc handle: "
496
- "umfMemoryProviderGetIPCHandleSize failed " );
513
+ LOG_ERR ("upstream provider is failed to get the size of IPC "
514
+ "handle " );
497
515
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
498
516
providerIpcData );
499
517
if (ret != UMF_RESULT_SUCCESS ) {
500
- LOG_ERR ("tracking get ipc handle: "
501
- "umfMemoryProviderPutIPCHandle failed" );
518
+ LOG_ERR ("upstream provider is failed to put IPC handle" );
502
519
}
503
520
return ret ;
504
521
}
505
522
506
523
size_t value_size = sizeof (ipc_cache_value_t ) + ipcDataSize ;
507
524
ipc_cache_value_t * cache_value = umf_ba_global_alloc (value_size );
508
525
if (!cache_value ) {
509
- LOG_ERR (
510
- "tracking get ipc handle: failed to allocate cache_value" );
526
+ LOG_ERR ("failed to allocate cache_value" );
511
527
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
512
528
providerIpcData );
513
529
if (ret != UMF_RESULT_SUCCESS ) {
514
- LOG_ERR ("tracking get ipc handle: "
515
- "umfMemoryProviderPutIPCHandle failed" );
530
+ LOG_ERR ("upstream provider is failed to put IPC handle" );
516
531
}
517
532
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
518
533
}
@@ -538,13 +553,11 @@ static umf_result_t trackingGetIpcHandle(void *provider, const void *ptr,
538
553
ret = umfMemoryProviderPutIPCHandle (p -> hUpstream ,
539
554
providerIpcData );
540
555
if (ret != UMF_RESULT_SUCCESS ) {
541
- LOG_ERR ("tracking get ipc handle: "
542
- "umfMemoryProviderPutIPCHandle failed" );
556
+ LOG_ERR ("upstream provider is failed to put IPC handle" );
543
557
return ret ;
544
558
}
545
559
if (insRes == ENOMEM ) {
546
- LOG_ERR (
547
- "tracking get ipc handle: insert to IPC cache failed" );
560
+ LOG_ERR ("insert to IPC cache failed due to OOM" );
548
561
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
549
562
}
550
563
}
@@ -585,13 +598,19 @@ static umf_result_t trackingOpenIpcHandle(void *provider, void *providerIpcData,
585
598
586
599
ret = umfMemoryProviderOpenIPCHandle (p -> hUpstream , providerIpcData , ptr );
587
600
if (ret != UMF_RESULT_SUCCESS ) {
601
+ LOG_ERR ("upstream provider is failed to open IPC handle" );
588
602
return ret ;
589
603
}
590
604
size_t bufferSize = getDataSizeFromIpcHandle (providerIpcData );
591
605
ret = umfMemoryTrackerAdd (p -> hTracker , p -> pool , * ptr , bufferSize );
592
606
if (ret != UMF_RESULT_SUCCESS ) {
607
+ LOG_ERR ("failed to add IPC region to the tracker, ptr=%p, size=%zu, "
608
+ "ret = %d" ,
609
+ * ptr , bufferSize , ret );
593
610
if (umfMemoryProviderCloseIPCHandle (p -> hUpstream , * ptr , bufferSize )) {
594
- // TODO: LOG
611
+ LOG_ERR ("upstream provider is failed to close IPC handle, ptr=%p, "
612
+ "size=%zu" ,
613
+ * ptr , bufferSize );
595
614
}
596
615
}
597
616
return ret ;
@@ -611,7 +630,9 @@ static umf_result_t trackingCloseIpcHandle(void *provider, void *ptr,
611
630
if (ret != UMF_RESULT_SUCCESS ) {
612
631
// DO NOT return an error here, because the tracking provider
613
632
// cannot change behaviour of the upstream provider.
614
- LOG_ERR ("tracking free: umfMemoryTrackerRemove failed" );
633
+ LOG_ERR ("failed to remove the region from the tracker, ptr=%p, "
634
+ "size=%zu, ret = %d" ,
635
+ ptr , size , ret );
615
636
}
616
637
}
617
638
return umfMemoryProviderCloseIPCHandle (p -> hUpstream , ptr , size );
@@ -645,14 +666,21 @@ umf_result_t umfTrackingMemoryProviderCreate(
645
666
params .hUpstream = hUpstream ;
646
667
params .hTracker = TRACKER ;
647
668
if (!params .hTracker ) {
669
+ LOG_ERR ("failed, TRACKER is NULL" );
648
670
return UMF_RESULT_ERROR_UNKNOWN ;
649
671
}
650
672
params .pool = hPool ;
651
673
params .ipcCache = critnib_new ();
652
674
if (!params .ipcCache ) {
675
+ LOG_ERR ("failed to create IPC cache" );
653
676
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
654
677
}
655
678
679
+ LOG_DEBUG ("upstream=%p, tracker=%p, "
680
+ "pool=%p, ipcCache=%p" ,
681
+ (void * )params .hUpstream , (void * )params .hTracker ,
682
+ (void * )params .pool , (void * )params .ipcCache );
683
+
656
684
return umfMemoryProviderCreate (& UMF_TRACKING_MEMORY_PROVIDER_OPS , & params ,
657
685
hTrackingProvider );
658
686
}
@@ -691,6 +719,9 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
691
719
goto err_destroy_mutex ;
692
720
}
693
721
722
+ LOG_DEBUG ("tracker created, handle=%p, segment map=%p" , (void * )handle ,
723
+ (void * )handle -> map );
724
+
694
725
return handle ;
695
726
696
727
err_destroy_mutex :
0 commit comments