Skip to content

Commit d44c40e

Browse files
committed
tools/power turbostat: verify arguments to params --show and --hide
$ sudo turbostat --quiet --show junk turbostat: Counter 'junk' can not be added. Previously, invalid arguments to --show and --hide were silently ignored Acked-by: Zhang Rui <[email protected]> Signed-off-by: Len Brown <[email protected]>
1 parent 5d939fb commit d44c40e

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

tools/power/x86/turbostat/turbostat.c

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,6 +2310,8 @@ char *deferred_add_names[MAX_DEFERRED];
23102310
char *deferred_skip_names[MAX_DEFERRED];
23112311
int deferred_add_index;
23122312
int deferred_skip_index;
2313+
unsigned int deferred_add_consumed;
2314+
unsigned int deferred_skip_consumed;
23132315

23142316
/*
23152317
* HIDE_LIST - hide this list of counters, show the rest [default]
@@ -10512,8 +10514,10 @@ int is_deferred_add(char *name)
1051210514
int i;
1051310515

1051410516
for (i = 0; i < deferred_add_index; ++i)
10515-
if (!strcmp(name, deferred_add_names[i]))
10517+
if (!strcmp(name, deferred_add_names[i])) {
10518+
deferred_add_consumed |= (1 << i);
1051610519
return 1;
10520+
}
1051710521
return 0;
1051810522
}
1051910523

@@ -10522,11 +10526,34 @@ int is_deferred_skip(char *name)
1052210526
int i;
1052310527

1052410528
for (i = 0; i < deferred_skip_index; ++i)
10525-
if (!strcmp(name, deferred_skip_names[i]))
10529+
if (!strcmp(name, deferred_skip_names[i])) {
10530+
deferred_skip_consumed |= (1 << i);
1052610531
return 1;
10532+
}
1052710533
return 0;
1052810534
}
1052910535

10536+
void verify_deferred_consumed(void)
10537+
{
10538+
int i;
10539+
int fail = 0;
10540+
10541+
for (i = 0; i < deferred_add_index; ++i) {
10542+
if (!(deferred_add_consumed & (1 << i))) {
10543+
warnx("Counter '%s' can not be added.", deferred_add_names[i]);
10544+
fail++;
10545+
}
10546+
}
10547+
for (i = 0; i < deferred_skip_index; ++i) {
10548+
if (!(deferred_skip_consumed & (1 << i))) {
10549+
warnx("Counter '%s' can not be skipped.", deferred_skip_names[i]);
10550+
fail++;
10551+
}
10552+
}
10553+
if (fail)
10554+
exit(-EINVAL);
10555+
}
10556+
1053010557
void probe_cpuidle_residency(void)
1053110558
{
1053210559
char path[64];
@@ -10885,6 +10912,8 @@ int main(int argc, char **argv)
1088510912
probe_cpuidle_residency();
1088610913
probe_cpuidle_counts();
1088710914

10915+
verify_deferred_consumed();
10916+
1088810917
if (!getuid())
1088910918
set_rlimit();
1089010919

0 commit comments

Comments
 (0)