]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf parse-events: Add a retirement latency modifier
authorIan Rogers <irogers@google.com>
Sat, 20 Jul 2024 06:20:54 +0000 (02:20 -0400)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 12 Aug 2024 21:15:27 +0000 (18:15 -0300)
Retirement latency is a separate sampled count used on newer Intel
CPUs.

Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Ian 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: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Perry Taylor <perry.taylor@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Samantha Alt <samantha.alt@intel.com>
Link: https://lore.kernel.org/r/20240720062102.444578-2-weilin.wang@intel.com
Signed-off-by: Weilin Wang <weilin.wang@intel.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evsel.h
tools/perf/util/parse-events.c
tools/perf/util/parse-events.h
tools/perf/util/parse-events.l

index 80b5f6dd868efa29f78d7da74e18169bef51a6d4..14f777b9e03e978a7bc38c6029c32de9e0e39ecb 100644 (file)
@@ -98,6 +98,7 @@ struct evsel {
                bool                    bpf_counter;
                bool                    use_config_name;
                bool                    skippable;
+               bool                    retire_lat;
                int                     bpf_fd;
                struct bpf_object       *bpf_obj;
                struct list_head        config_terms;
index 321586fb5556c6a837fca36d378a52134c39367d..fab01ba54e34da7daf0cce357fabf205082da19c 100644 (file)
@@ -1811,6 +1811,8 @@ static int parse_events__modifier_list(struct parse_events_state *parse_state,
                        evsel->weak_group = true;
                if (mod.bpf)
                        evsel->bpf_counter = true;
+               if (mod.retire_lat)
+                       evsel->retire_lat = true;
        }
        return 0;
 }
index e13de2c8b70603cb79f7f6ab5b601402422b6289..b735cd9e0acf514bacfb135080ffd524fa56e3d0 100644 (file)
@@ -203,6 +203,7 @@ struct parse_events_modifier {
        bool hypervisor : 1;    /* 'h' */
        bool guest : 1;         /* 'G' */
        bool host : 1;          /* 'H' */
+       bool retire_lat : 1;    /* 'R' */
 };
 
 int parse_events__modifier_event(struct parse_events_state *parse_state, void *loc,
index 16045c383ada5dccae2528442bbf861faf1e90a1..5a0bcd7f166ae4e71e77b23b3a05530fe51800bc 100644 (file)
@@ -209,6 +209,7 @@ static int modifiers(struct parse_events_state *parse_state, yyscan_t scanner)
                CASE('W', weak);
                CASE('e', exclusive);
                CASE('b', bpf);
+               CASE('R', retire_lat);
                default:
                        return PE_ERROR;
                }
@@ -250,7 +251,7 @@ drv_cfg_term        [a-zA-Z0-9_\.]+(=[a-zA-Z0-9_*?\.:]+)?
  * If you add a modifier you need to update check_modifier().
  * Also, the letters in modifier_event must not be in modifier_bp.
  */
-modifier_event [ukhpPGHSDIWeb]{1,15}
+modifier_event [ukhpPGHSDIWebR]{1,16}
 modifier_bp    [rwx]{1,3}
 lc_type        (L1-dcache|l1-d|l1d|L1-data|L1-icache|l1-i|l1i|L1-instruction|LLC|L2|dTLB|d-tlb|Data-TLB|iTLB|i-tlb|Instruction-TLB|branch|branches|bpu|btb|bpc|node)
 lc_op_result   (load|loads|read|store|stores|write|prefetch|prefetches|speculative-read|speculative-load|refs|Reference|ops|access|misses|miss)