2424#include " DmaBufferProvider/PdaDmaBufferProvider.h"
2525#include " DmaBufferProvider/FilePdaDmaBufferProvider.h"
2626#include " DmaBufferProvider/NullDmaBufferProvider.h"
27+ #include " ReadoutCard/ParameterTypes/SerialId.h"
2728#include " Visitor.h"
2829
2930namespace o2
@@ -56,7 +57,7 @@ DmaChannelPdaBase::DmaChannelPdaBase(const Parameters& parameters,
5657 [&](buffer_parameters::Memory parameters) {
5758 log (" Initializing with DMA buffer from memory region" , LogDebugDevel);
5859 return std::make_unique<PdaDmaBufferProvider>(mRocPciDevice ->getPciDevice (), parameters.address ,
59- parameters.size , bufferId, true );
60+ parameters.size , bufferId, mRocPciDevice -> getSerialId (), true );
6061 },
6162 [&](buffer_parameters::File parameters) {
6263 log (" Initializing with DMA buffer from memory-mapped file" , LogDebugDevel);
@@ -78,12 +79,11 @@ DmaChannelPdaBase::DmaChannelPdaBase(const Parameters& parameters,
7879 auto listSize = mBufferProvider ->getScatterGatherListSize ();
7980 auto hugePageMinSize = 1024 * 1024 * 2 ; // 2 MiB, the smallest hugepage size
8081 auto bufferSize = getBufferProvider ().getSize ();
81- // log(std::string("Scatter-gather list size: ") + std::to_string(listSize));
8282 if (listSize > (bufferSize / hugePageMinSize)) {
8383 std::string message =
8484 " Scatter-gather list size greater than buffer size divided by 2MiB (minimum hugepage size)."
8585 " This means the IOMMU is off and the buffer is not backed by hugepages - an unsupported buffer configuration." ;
86- log (message, LogErrorDevel); // TODO: Why log + throw?
86+ log (message, LogErrorDevel);
8787 BOOST_THROW_EXCEPTION (Exception () << ErrorInfo::Message (message));
8888 }
8989 }
@@ -92,20 +92,22 @@ DmaChannelPdaBase::DmaChannelPdaBase(const Parameters& parameters,
9292 if (getBufferProvider ().getSize () > 0 ) {
9393 // Non-null buffer
9494 bool checked = false ;
95+ // Get the memory mappings from linux
9596 const auto maps = Utilities::getMemoryMaps ();
97+ const auto bufferAddress = reinterpret_cast <uintptr_t >(getBufferProvider ().getAddress ());
9698 for (const auto & map : maps) {
97- const auto bufferAddress = reinterpret_cast < uintptr_t >( getBufferProvider (). getAddress ());
99+ // Match the map address with the provided buffer address
98100 if (map.addressStart == bufferAddress) {
99101 if (map.pageSizeKiB > 4 ) {
100- log (" Buffer is hugepage-backed" , LogDebugDevel );
102+ log (" Buffer is hugepage-backed" , LogDebugTrace );
101103 } else {
102104 if (AliceO2::Common::Iommu::isEnabled ()) {
103- log (" Buffer is NOT hugepage-backed, but IOMMU is enabled" , LogWarningDevel );
105+ log (" Buffer is NOT hugepage-backed, but IOMMU is enabled" , LogWarningTrace );
104106 } else {
105107 std::string message =
106108 " Buffer is NOT hugepage-backed and IOMMU is disabled - unsupported buffer "
107109 " configuration" ;
108- log (message, LogErrorDevel); // TODO: Why log + throw?
110+ log (message, LogWarningDevel);
109111 BOOST_THROW_EXCEPTION (Exception () << ErrorInfo::Message (message)
110112 << ErrorInfo::PossibleCauses ({ " roc-setup-hugetlbfs was not run" }));
111113 }
@@ -115,7 +117,7 @@ DmaChannelPdaBase::DmaChannelPdaBase(const Parameters& parameters,
115117 }
116118 }
117119 if (!checked) {
118- log (" Failed to check if buffer is hugepage-backed" , LogWarningDevel );
120+ log (" Failed to check if buffer is hugepage-backed" , LogDebugTrace );
119121 }
120122 }
121123}
0 commit comments