112500902SArnaldo Carvalho de Melo // SPDX-License-Identifier: GPL-2.0 212500902SArnaldo Carvalho de Melo #include "cacheline.h" 312500902SArnaldo Carvalho de Melo #include "../perf.h" 412500902SArnaldo Carvalho de Melo #include <unistd.h> 512500902SArnaldo Carvalho de Melo 612500902SArnaldo Carvalho de Melo #ifdef _SC_LEVEL1_DCACHE_LINESIZE 712500902SArnaldo Carvalho de Melo #define cache_line_size(cacheline_sizep) *cacheline_sizep = sysconf(_SC_LEVEL1_DCACHE_LINESIZE) 812500902SArnaldo Carvalho de Melo #else 912500902SArnaldo Carvalho de Melo #include <api/fs/fs.h> 1012500902SArnaldo Carvalho de Melo #include "debug.h" 1112500902SArnaldo Carvalho de Melo static void cache_line_size(int *cacheline_sizep) 1212500902SArnaldo Carvalho de Melo { 1312500902SArnaldo Carvalho de Melo if (sysfs__read_int("devices/system/cpu/cpu0/cache/index0/coherency_line_size", cacheline_sizep)) 1412500902SArnaldo Carvalho de Melo pr_debug("cannot determine cache line size"); 1512500902SArnaldo Carvalho de Melo } 1612500902SArnaldo Carvalho de Melo #endif 1712500902SArnaldo Carvalho de Melo 1812500902SArnaldo Carvalho de Melo int cacheline_size(void) 1912500902SArnaldo Carvalho de Melo { 2012500902SArnaldo Carvalho de Melo static int size; 2112500902SArnaldo Carvalho de Melo 2212500902SArnaldo Carvalho de Melo if (!size) 2312500902SArnaldo Carvalho de Melo cache_line_size(&size); 2412500902SArnaldo Carvalho de Melo 2512500902SArnaldo Carvalho de Melo return size; 2612500902SArnaldo Carvalho de Melo } 27