xref: /openbmc/linux/tools/perf/util/cacheline.c (revision 12500902)
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