On Mon, Mar 23, 2020 at 04:58:46PM -0700, Ian Rogers wrote: SNIP > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 10107747b361..31ed184566c8 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -37,6 +37,11 @@ > #include "util/evsel_config.h" > #include "util/event.h" > > +#ifdef HAVE_LIBPFM > +#include <perfmon/pfmlib_perf_event.h> > +static void print_libpfm_events(bool name_only); > +#endif > + > #define MAX_NAME_LEN 100 > > #ifdef PARSER_DEBUG > @@ -2794,6 +2799,10 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag, > print_sdt_events(NULL, NULL, name_only); > > metricgroup__print(true, true, NULL, name_only, details_flag); > + > +#ifdef HAVE_LIBPFM > + print_libpfm_events(name_only); we should make some effort to fit this into our current list shape, currently it looks like: $ perf list ... TopdownL1_SMT: Backend_Bound_SMT [This category represents fraction of slots where no uops are being delivered due to a lack of required resources for accepting new uops in the Backend> Bad_Speculation_SMT [This category represents fraction of slots wasted due to incorrect speculations. SMT version; use when SMT is enabled and measuring per logical CPU] Frontend_Bound_SMT [This category represents fraction of slots where the processor's Frontend undersupplies its Backend. SMT version; use when SMT is enabled and measurin> Retiring_SMT [This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired. SMT version; use when SMT is enabled > Name : UNHALTED_CORE_CYCLES PMU : ix86arch Desc : count core clock cycles whenever the clock signal on the specific core is running (not halted) Equiv : None Code : 0x3c Modif : PMU: [e] : edge level (may require counter-mask >= 1) (boolean) Modif : PMU: [i] : invert (boolean) Modif : PMU: [c] : counter-mask in range [0-255] (integer) Modif : PMU: [t] : measure any thread (boolean) Modif : PMU: [intx] : monitor only inside transactional memory region (boolean) Modif : PMU: [intxcp] : do not count occurrences inside aborted transactional memory region (boolean) Modif : perf_event: [u] : monitor at user level (boolean) Modif : perf_event: [k] : monitor at kernel level (boolean) Modif : perf_event: [period] : sampling period (integer) Modif : perf_event: [freq] : sampling frequency (Hz) (integer) Modif : perf_event: [excl] : exclusive access (boolean) Modif : perf_event: [mg] : monitor guest execution (boolean) Modif : perf_event: [mh] : monitor host execution (boolean) Modif : perf_event: [cpu] : CPU to program (integer) Modif : perf_event: [pinned] : pin event to counters (boolean) it needs some header like 'libpfm events:' and then probably just name and doc for basic list and more verbose for -v jirka