mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
perf print-events: Remove print_symbol_events
Now legacy hardware events are in json there's no need for a specific printing routine that previously served for both hardware and software events. The associated event_symbols_hw is also removed. To support the previous filtered version use an event glob of "legacy hardware" which matches the topic of the json events. Tested-by: Thomas Richter <tmricht@linux.ibm.com> Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: James Clark <james.clark@linaro.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
b12b5b531a
commit
50062baa53
|
|
@ -633,10 +633,18 @@ int cmd_list(int argc, const char **argv)
|
|||
zfree(&default_ps.pmu_glob);
|
||||
default_ps.pmu_glob = old_pmu_glob;
|
||||
} else if (strcmp(argv[i], "hw") == 0 ||
|
||||
strcmp(argv[i], "hardware") == 0)
|
||||
print_symbol_events(&print_cb, ps, PERF_TYPE_HARDWARE,
|
||||
event_symbols_hw, PERF_COUNT_HW_MAX);
|
||||
else if (strcmp(argv[i], "sw") == 0 ||
|
||||
strcmp(argv[i], "hardware") == 0) {
|
||||
char *old_event_glob = default_ps.event_glob;
|
||||
|
||||
default_ps.event_glob = strdup("legacy hardware");
|
||||
if (!default_ps.event_glob) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
perf_pmus__print_pmu_events(&print_cb, ps);
|
||||
zfree(&default_ps.event_glob);
|
||||
default_ps.event_glob = old_event_glob;
|
||||
} else if (strcmp(argv[i], "sw") == 0 ||
|
||||
strcmp(argv[i], "software") == 0) {
|
||||
char *old_pmu_glob = default_ps.pmu_glob;
|
||||
static const char * const sw_globs[] = { "software", "tool" };
|
||||
|
|
@ -714,8 +722,6 @@ int cmd_list(int argc, const char **argv)
|
|||
continue;
|
||||
}
|
||||
default_ps.event_glob = s;
|
||||
print_symbol_events(&print_cb, ps, PERF_TYPE_HARDWARE,
|
||||
event_symbols_hw, PERF_COUNT_HW_MAX);
|
||||
perf_pmus__print_pmu_events(&print_cb, ps);
|
||||
print_sdt_events(&print_cb, ps);
|
||||
default_ps.metrics = true;
|
||||
|
|
|
|||
|
|
@ -42,49 +42,6 @@ static int parse_events_terms__copy(const struct parse_events_terms *src,
|
|||
struct parse_events_terms *dest);
|
||||
static int parse_events_terms__to_strbuf(const struct parse_events_terms *terms, struct strbuf *sb);
|
||||
|
||||
const struct event_symbol event_symbols_hw[PERF_COUNT_HW_MAX] = {
|
||||
[PERF_COUNT_HW_CPU_CYCLES] = {
|
||||
.symbol = "cpu-cycles",
|
||||
.alias = "cycles",
|
||||
},
|
||||
[PERF_COUNT_HW_INSTRUCTIONS] = {
|
||||
.symbol = "instructions",
|
||||
.alias = "",
|
||||
},
|
||||
[PERF_COUNT_HW_CACHE_REFERENCES] = {
|
||||
.symbol = "cache-references",
|
||||
.alias = "",
|
||||
},
|
||||
[PERF_COUNT_HW_CACHE_MISSES] = {
|
||||
.symbol = "cache-misses",
|
||||
.alias = "",
|
||||
},
|
||||
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = {
|
||||
.symbol = "branch-instructions",
|
||||
.alias = "branches",
|
||||
},
|
||||
[PERF_COUNT_HW_BRANCH_MISSES] = {
|
||||
.symbol = "branch-misses",
|
||||
.alias = "",
|
||||
},
|
||||
[PERF_COUNT_HW_BUS_CYCLES] = {
|
||||
.symbol = "bus-cycles",
|
||||
.alias = "",
|
||||
},
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = {
|
||||
.symbol = "stalled-cycles-frontend",
|
||||
.alias = "idle-cycles-frontend",
|
||||
},
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = {
|
||||
.symbol = "stalled-cycles-backend",
|
||||
.alias = "idle-cycles-backend",
|
||||
},
|
||||
[PERF_COUNT_HW_REF_CPU_CYCLES] = {
|
||||
.symbol = "ref-cycles",
|
||||
.alias = "",
|
||||
},
|
||||
};
|
||||
|
||||
static const char *const event_types[] = {
|
||||
[PERF_TYPE_HARDWARE] = "hardware",
|
||||
[PERF_TYPE_SOFTWARE] = "software",
|
||||
|
|
|
|||
|
|
@ -266,7 +266,6 @@ struct event_symbol {
|
|||
const char *symbol;
|
||||
const char *alias;
|
||||
};
|
||||
extern const struct event_symbol event_symbols_hw[];
|
||||
|
||||
char *parse_events_formats_error_string(char *additional_terms);
|
||||
|
||||
|
|
|
|||
|
|
@ -186,60 +186,6 @@ bool is_event_supported(u8 type, u64 config)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void print_symbol_events(const struct print_callbacks *print_cb, void *print_state,
|
||||
unsigned int type, const struct event_symbol *syms,
|
||||
unsigned int max)
|
||||
{
|
||||
struct strlist *evt_name_list = strlist__new(NULL, NULL);
|
||||
struct str_node *nd;
|
||||
|
||||
if (!evt_name_list) {
|
||||
pr_debug("Failed to allocate new strlist for symbol events\n");
|
||||
return;
|
||||
}
|
||||
for (unsigned int i = 0; i < max; i++) {
|
||||
/*
|
||||
* New attr.config still not supported here, the latest
|
||||
* example was PERF_COUNT_SW_CGROUP_SWITCHES
|
||||
*/
|
||||
if (syms[i].symbol == NULL)
|
||||
continue;
|
||||
|
||||
if (!is_event_supported(type, i))
|
||||
continue;
|
||||
|
||||
if (strlen(syms[i].alias)) {
|
||||
char name[MAX_NAME_LEN];
|
||||
|
||||
snprintf(name, MAX_NAME_LEN, "%s OR %s", syms[i].symbol, syms[i].alias);
|
||||
strlist__add(evt_name_list, name);
|
||||
} else
|
||||
strlist__add(evt_name_list, syms[i].symbol);
|
||||
}
|
||||
|
||||
strlist__for_each_entry(nd, evt_name_list) {
|
||||
char *alias = strstr(nd->s, " OR ");
|
||||
|
||||
if (alias) {
|
||||
*alias = '\0';
|
||||
alias += 4;
|
||||
}
|
||||
print_cb->print_event(print_state,
|
||||
/*topic=*/NULL,
|
||||
/*pmu_name=*/NULL,
|
||||
type,
|
||||
nd->s,
|
||||
alias,
|
||||
/*scale_unit=*/NULL,
|
||||
/*deprecated=*/false,
|
||||
event_type_descriptors[type],
|
||||
/*desc=*/NULL,
|
||||
/*long_desc=*/NULL,
|
||||
/*encoding_desc=*/NULL);
|
||||
}
|
||||
strlist__delete(evt_name_list);
|
||||
}
|
||||
|
||||
/** struct mep - RB-tree node for building printing information. */
|
||||
struct mep {
|
||||
/** nd - RB-tree element. */
|
||||
|
|
@ -378,9 +324,6 @@ void metricgroup__print(const struct print_callbacks *print_cb, void *print_stat
|
|||
*/
|
||||
void print_events(const struct print_callbacks *print_cb, void *print_state)
|
||||
{
|
||||
print_symbol_events(print_cb, print_state, PERF_TYPE_HARDWARE,
|
||||
event_symbols_hw, PERF_COUNT_HW_MAX);
|
||||
|
||||
perf_pmus__print_pmu_events(print_cb, print_state);
|
||||
|
||||
print_cb->print_event(print_state,
|
||||
|
|
|
|||
|
|
@ -33,9 +33,6 @@ struct print_callbacks {
|
|||
/** Print all events, the default when no options are specified. */
|
||||
void print_events(const struct print_callbacks *print_cb, void *print_state);
|
||||
void print_sdt_events(const struct print_callbacks *print_cb, void *print_state);
|
||||
void print_symbol_events(const struct print_callbacks *print_cb, void *print_state,
|
||||
unsigned int type, const struct event_symbol *syms,
|
||||
unsigned int max);
|
||||
void metricgroup__print(const struct print_callbacks *print_cb, void *print_state);
|
||||
bool is_event_supported(u8 type, u64 config);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user