@@ -394,13 +394,16 @@ class DisjointPool::AllocImpl {
394
394
};
395
395
396
396
static void *memoryProviderAlloc (umf_memory_provider_handle_t hProvider,
397
- size_t size, size_t alignment = 0 ) {
397
+ bool hostMemory, size_t size,
398
+ size_t alignment = 0 ) {
398
399
void *ptr;
399
400
auto ret = umfMemoryProviderAlloc (hProvider, size, alignment, &ptr);
400
401
if (ret != UMF_RESULT_SUCCESS) {
401
402
throw MemoryProviderError{ret};
402
403
}
403
- utils_annotate_memory_inaccessible (ptr, size);
404
+ if (hostMemory) {
405
+ utils_annotate_memory_inaccessible (ptr, size);
406
+ }
404
407
return ptr;
405
408
}
406
409
@@ -438,7 +441,8 @@ Slab::Slab(Bucket &Bkt)
438
441
Chunks(Bkt.SlabMinSize() / Bkt.getSize()), NumAllocated{0 },
439
442
bucket (Bkt), SlabListIter{}, FirstFreeChunkIdx{0 } {
440
443
auto SlabSize = Bkt.SlabAllocSize ();
441
- MemPtr = memoryProviderAlloc (Bkt.getMemHandle (), SlabSize);
444
+ MemPtr = memoryProviderAlloc (
445
+ Bkt.getMemHandle (), Bkt.getAllocCtx ().getParams ().HostMemory , SlabSize);
442
446
regSlab (*this );
443
447
}
444
448
@@ -821,8 +825,10 @@ void *DisjointPool::AllocImpl::allocate(size_t Size, bool &FromPool) try {
821
825
822
826
FromPool = false ;
823
827
if (Size > getParams ().MaxPoolableSize ) {
824
- Ptr = memoryProviderAlloc (getMemHandle (), Size);
825
- utils_annotate_memory_undefined (Ptr, Size);
828
+ Ptr = memoryProviderAlloc (getMemHandle (), getParams ().HostMemory , Size);
829
+ if (getParams ().HostMemory ) {
830
+ utils_annotate_memory_undefined (Ptr, Size);
831
+ }
826
832
return Ptr;
827
833
}
828
834
@@ -839,7 +845,9 @@ void *DisjointPool::AllocImpl::allocate(size_t Size, bool &FromPool) try {
839
845
}
840
846
841
847
VALGRIND_DO_MEMPOOL_ALLOC (this , Ptr, Size);
842
- utils_annotate_memory_undefined (Ptr, Bucket.getSize ());
848
+ if (getParams ().HostMemory ) {
849
+ utils_annotate_memory_undefined (Ptr, Bucket.getSize ());
850
+ }
843
851
844
852
return Ptr;
845
853
} catch (MemoryProviderError &e) {
@@ -876,8 +884,11 @@ void *DisjointPool::AllocImpl::allocate(size_t Size, size_t Alignment,
876
884
// If not, just request aligned pointer from the system.
877
885
FromPool = false ;
878
886
if (AlignedSize > getParams ().MaxPoolableSize ) {
879
- Ptr = memoryProviderAlloc (getMemHandle (), Size, Alignment);
880
- utils_annotate_memory_undefined (Ptr, Size);
887
+ Ptr = memoryProviderAlloc (getMemHandle (), getParams ().HostMemory , Size,
888
+ Alignment);
889
+ if (getParams ().HostMemory ) {
890
+ utils_annotate_memory_undefined (Ptr, Size);
891
+ }
881
892
return Ptr;
882
893
}
883
894
@@ -894,8 +905,9 @@ void *DisjointPool::AllocImpl::allocate(size_t Size, size_t Alignment,
894
905
}
895
906
896
907
VALGRIND_DO_MEMPOOL_ALLOC (this , AlignPtrUp (Ptr, Alignment), Size);
897
- utils_annotate_memory_undefined (AlignPtrUp (Ptr, Alignment), Size);
898
-
908
+ if (getParams ().HostMemory ) {
909
+ utils_annotate_memory_undefined (AlignPtrUp (Ptr, Alignment), Size);
910
+ }
899
911
return AlignPtrUp (Ptr, Alignment);
900
912
} catch (MemoryProviderError &e) {
901
913
umf::getPoolLastStatusRef<DisjointPool>() = e.code ;
@@ -962,8 +974,9 @@ void DisjointPool::AllocImpl::deallocate(void *Ptr, bool &ToPool) {
962
974
}
963
975
964
976
VALGRIND_DO_MEMPOOL_FREE (this , Ptr);
965
- utils_annotate_memory_inaccessible (Ptr, Bucket.getSize ());
966
-
977
+ if (getParams ().HostMemory ) {
978
+ utils_annotate_memory_inaccessible (Ptr, Bucket.getSize ());
979
+ }
967
980
if (Bucket.getSize () <= Bucket.ChunkCutOff ()) {
968
981
Bucket.freeChunk (Ptr, Slab, ToPool);
969
982
} else {
0 commit comments