compute-runtime/shared/source/os_interface/linux/clos_cache.cpp

52 lines
1.3 KiB
C++

/*
* Copyright (C) 2021-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/os_interface/linux/clos_cache.h"
#include "shared/source/helpers/common_types.h"
#include "shared/source/os_interface/linux/ioctl_helper.h"
#include <cerrno>
#include <cstring>
namespace NEO {
CacheRegion ClosCacheReservation::reserveCache(CacheLevel cacheLevel, uint16_t numWays) {
auto closIndex = allocEntry(cacheLevel);
if (closIndex == CacheRegion::none) {
return CacheRegion::none;
}
auto allocWays = allocCacheWay(closIndex, cacheLevel, numWays);
if (allocWays != numWays) {
freeEntry(closIndex);
return CacheRegion::none;
}
return closIndex;
}
CacheRegion ClosCacheReservation::freeCache(CacheLevel cacheLevel, CacheRegion closIndex) {
allocCacheWay(closIndex, cacheLevel, 0);
return freeEntry(closIndex);
}
CacheRegion ClosCacheReservation::allocEntry(CacheLevel cacheLevel) {
return ioctlHelper.closAlloc(cacheLevel);
}
CacheRegion ClosCacheReservation::freeEntry(CacheRegion closIndex) {
return ioctlHelper.closFree(closIndex);
}
uint16_t ClosCacheReservation::allocCacheWay(CacheRegion closIndex, CacheLevel cacheLevel, uint16_t numWays) {
return ioctlHelper.closAllocWays(closIndex, static_cast<uint16_t>(cacheLevel), numWays);
}
} // namespace NEO