diff options
author | Mark Brown | 2017-09-19 15:12:47 +0200 |
---|---|---|
committer | Mark Brown | 2017-09-19 15:12:47 +0200 |
commit | e9331ee9b164d58b4dd0abc882ba7e23d2f404b3 (patch) | |
tree | 903d078e53a59ed65708193f2486ad0b9a8109d8 /tools/perf/util/smt.c | |
parent | ASoC: rockchip: Add dapm route for HDMI (diff) | |
parent | Linux 4.14-rc1 (diff) | |
download | kernel-qcow2-linux-e9331ee9b164d58b4dd0abc882ba7e23d2f404b3.tar.gz kernel-qcow2-linux-e9331ee9b164d58b4dd0abc882ba7e23d2f404b3.tar.xz kernel-qcow2-linux-e9331ee9b164d58b4dd0abc882ba7e23d2f404b3.zip |
Merge tag 'v4.14-rc1' into asoc-rockchip
Linux 4.14-rc1
Diffstat (limited to 'tools/perf/util/smt.c')
-rw-r--r-- | tools/perf/util/smt.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/perf/util/smt.c b/tools/perf/util/smt.c new file mode 100644 index 000000000000..453f6f6f29f3 --- /dev/null +++ b/tools/perf/util/smt.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <linux/bitops.h> +#include "api/fs/fs.h" +#include "smt.h" + +int smt_on(void) +{ + static bool cached; + static int cached_result; + int cpu; + int ncpu; + + if (cached) + return cached_result; + + ncpu = sysconf(_SC_NPROCESSORS_CONF); + for (cpu = 0; cpu < ncpu; cpu++) { + unsigned long long siblings; + char *str; + size_t strlen; + char fn[256]; + + snprintf(fn, sizeof fn, + "devices/system/cpu/cpu%d/topology/thread_siblings", + cpu); + if (sysfs__read_str(fn, &str, &strlen) < 0) + continue; + /* Entry is hex, but does not have 0x, so need custom parser */ + siblings = strtoull(str, NULL, 16); + free(str); + if (hweight64(siblings) > 1) { + cached_result = 1; + cached = true; + break; + } + } + if (!cached) { + cached_result = 0; + cached = true; + } + return cached_result; +} |