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