• Ian Rogers's avatar
    perf list: Reorganize to use callbacks to allow honouring command line options · e5c6109f
    Ian Rogers authored
    Rather than controlling the list output with passed flags, add
    callbacks that are called when an event or metric are
    encountered. State is passed to the callback so that command line
    options can be respected, alternatively the callbacks can be changed.
    
    Fix a few bugs:
     - wordwrap to columns metric descriptions and expressions;
     - remove unnecessary whitespace after PMU event names;
     - the metric filter is a glob but matched using strstr which will
       always fail, switch to using a proper globmatch,
     - the detail flag gives details for extra kernel PMU events like
       branch-instructions.
    
    In metricgroup.c switch from struct mep being a rbtree of metricgroups
    containing a list of metrics, to the tree directly containing all the
    metrics. In general the alias for a name is passed to the print
    routine rather than being contained in the name with OR.
    
    Committer notes:
    
    Check the asprint() return to address this on fedora 36:
    
      util/print-events.c: In function ‘print_sdt_events’:
      util/print-events.c:183:33: error: ignoring return value of ‘asprintf’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result]
        183 |                                 asprintf(&evt_name, "%s@%s(%.12s)", sdt_name->s, path, bid);
            |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      cc1: all warnings being treated as errors
    
      $ gcc --version | head -1
      gcc (GCC) 12.2.1 20220819 (Red Hat 12.2.1-2)
      $
    
    Fix ps.pmu_glob setting when dealing with *:* events, it was being left
    with a freed pointer that then at the end of cmd_list() would be double
    freed.
    
    Check if pmu_name is NULL in default_print_event() before calling
    strglobmatch(pmu_name, ...) to avoid a segfault.
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Caleb Biggers <caleb.biggers@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Leo Yan <leo.yan@linaro.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Perry Taylor <perry.taylor@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@amd.com>
    Cc: Rob Herring <robh@kernel.org>
    Cc: Sandipan Das <sandipan.das@amd.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Weilin Wang <weilin.wang@intel.com>
    Cc: Xin Gao <gaoxin@cdjrlc.com>
    Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
    Link: http://lore.kernel.org/lkml/20221114210723.2749751-10-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    e5c6109f
metricgroup.h 2.93 KB