summaryrefslogtreecommitdiffstats
path: root/tools/power/x86
diff options
context:
space:
mode:
authorZhang Rui <rui.zhang@intel.com>2023-10-04 14:25:25 +0800
committerZhang Rui <rui.zhang@intel.com>2023-10-20 10:27:09 +0800
commit7bb3fe27ad4f62039b2ac80a2147452a608b474f (patch)
tree9a52c2aa42f80f735307b3d8f8f571345dd3bdb1 /tools/power/x86
parent4ede6d1ce7acba9cafe7df4e935b174623cd2181 (diff)
downloadlinux-stable-7bb3fe27ad4f62039b2ac80a2147452a608b474f.tar.gz
linux-stable-7bb3fe27ad4f62039b2ac80a2147452a608b474f.tar.bz2
linux-stable-7bb3fe27ad4f62039b2ac80a2147452a608b474f.zip
tools/power/turbostat: Obey allowed CPUs during startup
Set turbostat CPU affinity to make sure turbostat is running on one of the allowed CPUs. Set base_cpu to the first allowed CPU so that some platform information is dumped using one of the allowed CPUs. Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Diffstat (limited to 'tools/power/x86')
-rw-r--r--tools/power/x86/turbostat/turbostat.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 202cf5231d7a..f81ce832d17a 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -5731,6 +5731,10 @@ void topology_probe()
}
}
+ if (!CPU_COUNT_S(cpu_allowed_setsize, cpu_allowed_set))
+ err(-ENODEV, "No valid cpus found");
+ sched_setaffinity(0, cpu_allowed_setsize, cpu_allowed_set);
+
/*
* Allocate and initialize cpu_affinity_set
*/
@@ -5941,12 +5945,17 @@ void setup_all_buffers(void)
void set_base_cpu(void)
{
- base_cpu = sched_getcpu();
- if (base_cpu < 0)
- err(-ENODEV, "No valid cpus found");
+ int i;
- if (debug > 1)
- fprintf(outf, "base_cpu = %d\n", base_cpu);
+ for (i = 0; i < topo.max_cpu_num + 1; ++i) {
+ if (cpu_is_not_allowed(i))
+ continue;
+ base_cpu = i;
+ if (debug > 1)
+ fprintf(outf, "base_cpu = %d\n", base_cpu);
+ return;
+ }
+ err(-ENODEV, "No valid cpus found");
}
void turbostat_init()
@@ -5976,8 +5985,6 @@ int fork_it(char **argv)
first_counter_read = 0;
if (status)
exit(status);
- /* clear affinity side-effect of get_counters() */
- sched_setaffinity(0, cpu_present_setsize, cpu_present_set);
gettimeofday(&tv_even, (struct timezone *)NULL);
child_pid = fork();