mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
cpumf/lshwc: Show explicitly selected unnamed counters with --hide
When an unnamed counter is explicitly selected by numeric ID via --counters (for example, --counters=218), show it even when --hide is enabled. Keep --hide effective for unnamed counters that were not explicitly selected. To do that, evaluate the counter filter once per counter and reuse the result to distinguish between a generic match and an explicit numeric-ID match. Suggested-by: Christian Borntraeger <borntraeger@linux.ibm.com> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Jan Polensky <japo@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
2bb61f96c0
commit
6e7eb62ea1
@@ -406,6 +406,38 @@ static void output_times(struct time_formats date)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ctr_filter_match {
|
||||||
|
bool selected;
|
||||||
|
bool selected_by_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ctr_filter_match ctr_match(const char *name, const char *list,
|
||||||
|
size_t id)
|
||||||
|
{
|
||||||
|
struct ctr_filter_match match = { .selected = !list };
|
||||||
|
char *copy, *token;
|
||||||
|
char id_str[32];
|
||||||
|
|
||||||
|
if (!list)
|
||||||
|
return match;
|
||||||
|
|
||||||
|
snprintf(id_str, sizeof(id_str), "%zu", id);
|
||||||
|
copy = util_strdup(list);
|
||||||
|
for (token = strtok(copy, ","); token; token = strtok(NULL, ",")) {
|
||||||
|
if (name && strcmp(token, name) == 0) {
|
||||||
|
match.selected = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (strcmp(token, id_str) == 0) {
|
||||||
|
match.selected = true;
|
||||||
|
match.selected_by_id = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(copy);
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
static void prepare_counter(size_t id, unsigned long value)
|
static void prepare_counter(size_t id, unsigned long value)
|
||||||
{
|
{
|
||||||
if (output_format == FMT_CSV) {
|
if (output_format == FMT_CSV) {
|
||||||
@@ -438,9 +470,14 @@ static void output_per_cpu(struct time_formats date)
|
|||||||
util_fmt_obj_start(FMT_LIST, "counters");
|
util_fmt_obj_start(FMT_LIST, "counters");
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(ctrname); ++i) {
|
for (size_t i = 0; i < ARRAY_SIZE(ctrname); ++i) {
|
||||||
|
struct ctr_filter_match match;
|
||||||
|
|
||||||
if (!ctrname[i].hitcnt)
|
if (!ctrname[i].hitcnt)
|
||||||
continue;
|
continue;
|
||||||
if (hideundef && !ctrname[i].name)
|
match = ctr_match(ctrname[i].name, ctrlist, i);
|
||||||
|
if (!match.selected)
|
||||||
|
continue;
|
||||||
|
if (hideundef && !ctrname[i].name && !match.selected_by_id)
|
||||||
continue;
|
continue;
|
||||||
prepare_counter(i, ctrname[i].ccv[h]);
|
prepare_counter(i, ctrname[i].ccv[h]);
|
||||||
}
|
}
|
||||||
@@ -462,9 +499,14 @@ static void output_total(struct time_formats date)
|
|||||||
util_fmt_obj_start(FMT_LIST, "counters");
|
util_fmt_obj_start(FMT_LIST, "counters");
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(ctrname); ++i) {
|
for (size_t i = 0; i < ARRAY_SIZE(ctrname); ++i) {
|
||||||
|
struct ctr_filter_match match;
|
||||||
|
|
||||||
if (!ctrname[i].hitcnt)
|
if (!ctrname[i].hitcnt)
|
||||||
continue;
|
continue;
|
||||||
if (hideundef && !ctrname[i].name)
|
match = ctr_match(ctrname[i].name, ctrlist, i);
|
||||||
|
if (!match.selected)
|
||||||
|
continue;
|
||||||
|
if (hideundef && !ctrname[i].name && !match.selected_by_id)
|
||||||
continue;
|
continue;
|
||||||
prepare_counter(i, ctrname[i].total);
|
prepare_counter(i, ctrname[i].total);
|
||||||
ctrname[i].total = 0;
|
ctrname[i].total = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user