diff --git a/src/cpucounters.cpp b/src/cpucounters.cpp index eaec4f3e..5e92b78a 100644 --- a/src/cpucounters.cpp +++ b/src/cpucounters.cpp @@ -7330,7 +7330,14 @@ ServerUncoreCounterState PCM::getServerUncoreCounterState(uint32 socket) result.UncClocks = getUncoreClocks(socket); - for (size_t p = 0; p < getNumCXLPorts(socket); ++p) + const auto numCXLPorts = getNumCXLPorts(socket); + + assert(numCXLPorts <= result.CXLCMCounter.size() && "Number of CXL ports exceeds CXLCMCounter array size"); + assert(numCXLPorts <= result.CXLDPCounter.size() && "Number of CXL ports exceeds CXLDPCounter array size"); + + const auto maxPorts = (std::min)(numCXLPorts, (std::min)(result.CXLCMCounter.size(), result.CXLDPCounter.size())); + + for (size_t p = 0; p < maxPorts; ++p) { for (int i = 0; i < ServerUncoreCounterState::maxCounters && socket < cxlPMUs.size() && size_t(i) < cxlPMUs[socket][p].first.size(); ++i) { diff --git a/src/cpucounters.h b/src/cpucounters.h index 90b5ecf9..2aafa00c 100644 --- a/src/cpucounters.h +++ b/src/cpucounters.h @@ -3790,7 +3790,7 @@ class ServerUncoreCounterState : public UncoreCounterState maxChannels = 32, maxXPILinks = 6, maxIIOStacks = 16, - maxCXLPorts = 6, + maxCXLPorts = 16, maxCounters = UncorePMU::maxCounters }; enum EventPosition