sysconf params like _SC_LEVEL1_DCACHE_LINESIZE are not universally
implemented, therefore check for them being available, if not there
then read the sysfs directly to get the value

Upstream-Status: Submitted [https://github.com/stressapptest/stressapptest/pull/100]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
--- a/src/sat.cc
+++ b/src/sat.cc
@@ -1482,15 +1482,47 @@ int Sat::CpuCount() {
   return sysconf(_SC_NPROCESSORS_CONF);
 }
 
+int Sat::ReadInt(const char *filename, int *value) {
+  char line[64];
+  int fd = open(filename, O_RDONLY), err = -1;
+
+  if (fd < 0)
+    return -1;
+  if (read(fd, line, sizeof(line)) > 0) {
+    *value = atoi(line);
+    err = 0;
+  }
+
+  close(fd);
+  return err;
+}
+
 // Return the worst case (largest) cache line size of the various levels of
 // cache actually prsent in the machine.
 int Sat::CacheLineSize() {
-  int max_linesize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
-  int linesize = sysconf(_SC_LEVEL2_CACHE_LINESIZE);
+  int max_linesize, linesize;
+#ifdef _SC_LEVEL1_DCACHE_LINESIZE
+  max_linesize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
+#else
+  ReadInt("/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size", &max_linesize);
+#endif
+#ifdef _SC_LEVEL2_DCACHE_LINESIZE
+  linesize = sysconf(_SC_LEVEL2_DCACHE_LINESIZE);
+#else
+  ReadInt("/sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size", &linesize);
+#endif
   if (linesize > max_linesize) max_linesize = linesize;
-  linesize = sysconf(_SC_LEVEL3_CACHE_LINESIZE);
+#ifdef _SC_LEVEL3_DCACHE_LINESIZE
+  linesize = sysconf(_SC_LEVEL3_DCACHE_LINESIZE);
+#else
+  ReadInt("/sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size", &linesize);
+#endif
   if (linesize > max_linesize) max_linesize = linesize;
-  linesize = sysconf(_SC_LEVEL4_CACHE_LINESIZE);
+#ifdef _SC_LEVEL4_DCACHE_LINESIZE
+  linesize = sysconf(_SC_LEVEL4_DCACHE_LINESIZE);
+#else
+  ReadInt("/sys/devices/system/cpu/cpu0/cache/index3/coherency_line_size", &linesize);
+#endif
   if (linesize > max_linesize) max_linesize = linesize;
   return max_linesize;
 }
--- a/src/sat.h
+++ b/src/sat.h
@@ -136,7 +136,8 @@ class Sat {
   int CpuCount();
   // Return the worst-case (largest) cache line size of the system.
   int CacheLineSize();
-
+  // Read int values from kernel file system e.g. sysfs
+  int ReadInt(const char *filename, int *value);
   // Collect error counts from threads.
   int64 GetTotalErrorCount();
 
