1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun #include "cacheline.h" 3*4882a593Smuzhiyun #include <unistd.h> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #ifdef _SC_LEVEL1_DCACHE_LINESIZE 6*4882a593Smuzhiyun #define cache_line_size(cacheline_sizep) *cacheline_sizep = sysconf(_SC_LEVEL1_DCACHE_LINESIZE) 7*4882a593Smuzhiyun #else 8*4882a593Smuzhiyun #include <api/fs/fs.h> 9*4882a593Smuzhiyun #include "debug.h" cache_line_size(int * cacheline_sizep)10*4882a593Smuzhiyunstatic void cache_line_size(int *cacheline_sizep) 11*4882a593Smuzhiyun { 12*4882a593Smuzhiyun if (sysfs__read_int("devices/system/cpu/cpu0/cache/index0/coherency_line_size", cacheline_sizep)) 13*4882a593Smuzhiyun pr_debug("cannot determine cache line size"); 14*4882a593Smuzhiyun } 15*4882a593Smuzhiyun #endif 16*4882a593Smuzhiyun cacheline_size(void)17*4882a593Smuzhiyunint cacheline_size(void) 18*4882a593Smuzhiyun { 19*4882a593Smuzhiyun static int size; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun if (!size) 22*4882a593Smuzhiyun cache_line_size(&size); 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun return size; 25*4882a593Smuzhiyun } 26