1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
/*
* 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
|