mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-04-02 02:49:12 +00:00
stressapptest: Implement reading sysfs and use it if sysconf is not there
This helps in building on musl platform where _SC_LEVEL1_DCACHE_LINESIZE is not available Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
36fcb1a8d1
commit
5673dae7b2
@ -0,0 +1,72 @@
|
||||
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: Pending
|
||||
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();
|
||||
|
||||
@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55ea9d559f985fb4834317d8ed6b9e58"
|
||||
|
||||
SRC_URI = "https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz \
|
||||
file://libcplusplus-compat.patch \
|
||||
file://read_sysfs_for_cachesize.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "d3a526c174c049dd7a1068dc74a62be2"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user