perf tools: Add aux-action config term
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 16 Dec 2024 07:02:38 +0000 (09:02 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 18 Dec 2024 19:24:32 +0000 (16:24 -0300)
Add a new common config term "aux-action" to use for configuring AUX area
trace pause / resume. The value is a string that will be parsed in a
subsequent patch.

Reviewed-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20241216070244.14450-3-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evsel.c
tools/perf/util/evsel_config.h
tools/perf/util/parse-events.c
tools/perf/util/parse-events.h
tools/perf/util/parse-events.l
tools/perf/util/pmu.c

index c93311e502cf712ea9bb58893203404d0f095e83..a17404b8d0c8d116427d3047cf46e6bab6dcfc98 100644 (file)
@@ -1151,6 +1151,8 @@ static void evsel__apply_config_terms(struct evsel *evsel,
                case EVSEL__CONFIG_TERM_AUX_OUTPUT:
                        attr->aux_output = term->val.aux_output ? 1 : 0;
                        break;
+               case EVSEL__CONFIG_TERM_AUX_ACTION:
+                       break;
                case EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE:
                        /* Already applied by auxtrace */
                        break;
index aee6f808b512c73309f101e91712d3c0a8dfca9e..af52a1516d0bcc7018f1acda27859631bfbf0903 100644 (file)
@@ -25,6 +25,7 @@ enum evsel_term_type {
        EVSEL__CONFIG_TERM_BRANCH,
        EVSEL__CONFIG_TERM_PERCORE,
        EVSEL__CONFIG_TERM_AUX_OUTPUT,
+       EVSEL__CONFIG_TERM_AUX_ACTION,
        EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE,
        EVSEL__CONFIG_TERM_CFG_CHG,
 };
index 7fc1c36ef2a4467954af8b6f1c326093c452fba6..1e23faa364b11f0485a16ca2de9cc8b157860c58 100644 (file)
@@ -793,6 +793,7 @@ const char *parse_events__term_type_str(enum parse_events__term_type term_type)
                [PARSE_EVENTS__TERM_TYPE_DRV_CFG]               = "driver-config",
                [PARSE_EVENTS__TERM_TYPE_PERCORE]               = "percore",
                [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT]            = "aux-output",
+               [PARSE_EVENTS__TERM_TYPE_AUX_ACTION]            = "aux-action",
                [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE]       = "aux-sample-size",
                [PARSE_EVENTS__TERM_TYPE_METRIC_ID]             = "metric-id",
                [PARSE_EVENTS__TERM_TYPE_RAW]                   = "raw",
@@ -842,6 +843,7 @@ config_term_avail(enum parse_events__term_type term_type, struct parse_events_er
        case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
        case PARSE_EVENTS__TERM_TYPE_DRV_CFG:
        case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
+       case PARSE_EVENTS__TERM_TYPE_AUX_ACTION:
        case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
        case PARSE_EVENTS__TERM_TYPE_RAW:
        case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE:
@@ -961,6 +963,9 @@ do {                                                                           \
        case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
                CHECK_TYPE_VAL(NUM);
                break;
+       case PARSE_EVENTS__TERM_TYPE_AUX_ACTION:
+               CHECK_TYPE_VAL(STR);
+               break;
        case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
                CHECK_TYPE_VAL(NUM);
                if (term->val.num > UINT_MAX) {
@@ -1078,6 +1083,7 @@ static int config_term_tracepoint(struct perf_event_attr *attr,
        case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
        case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
        case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
+       case PARSE_EVENTS__TERM_TYPE_AUX_ACTION:
        case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
                return config_term_common(attr, term, err);
        case PARSE_EVENTS__TERM_TYPE_USER:
@@ -1213,6 +1219,9 @@ do {                                                              \
                        ADD_CONFIG_TERM_VAL(AUX_OUTPUT, aux_output,
                                            term->val.num ? 1 : 0, term->weak);
                        break;
+               case PARSE_EVENTS__TERM_TYPE_AUX_ACTION:
+                       ADD_CONFIG_TERM_STR(AUX_ACTION, term->val.str, term->weak);
+                       break;
                case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
                        ADD_CONFIG_TERM_VAL(AUX_SAMPLE_SIZE, aux_sample_size,
                                            term->val.num, term->weak);
@@ -1275,6 +1284,7 @@ static int get_config_chgs(struct perf_pmu *pmu, struct parse_events_terms *head
                case PARSE_EVENTS__TERM_TYPE_DRV_CFG:
                case PARSE_EVENTS__TERM_TYPE_PERCORE:
                case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
+               case PARSE_EVENTS__TERM_TYPE_AUX_ACTION:
                case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE:
                case PARSE_EVENTS__TERM_TYPE_METRIC_ID:
                case PARSE_EVENTS__TERM_TYPE_RAW:
index 3f4334ec62317205b551cdc97ffa483980d4f701..e176a34ab088e4c8232a51652facb10d2a9b9863 100644 (file)
@@ -74,6 +74,7 @@ enum parse_events__term_type {
        PARSE_EVENTS__TERM_TYPE_DRV_CFG,
        PARSE_EVENTS__TERM_TYPE_PERCORE,
        PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT,
+       PARSE_EVENTS__TERM_TYPE_AUX_ACTION,
        PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE,
        PARSE_EVENTS__TERM_TYPE_METRIC_ID,
        PARSE_EVENTS__TERM_TYPE_RAW,
index 14e5bd856a187566a70ed6b2f6002946947c79b3..bf7f735486058134458d861ed3bb457d6221d582 100644 (file)
@@ -321,6 +321,7 @@ overwrite           { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_OVERWRITE); }
 no-overwrite           { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); }
 percore                        { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_PERCORE); }
 aux-output             { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT); }
+aux-action             { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_ACTION); }
 aux-sample-size                { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE); }
 metric-id              { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_METRIC_ID); }
 cpu-cycles|cycles                              { return hw_term(yyscanner, PERF_COUNT_HW_CPU_CYCLES); }
index 891c905d08a1998425a7366d39e116842b4ad290..6206c8fe2bf941ab9a6abe6d8ee15b285447ba8d 100644 (file)
@@ -1773,6 +1773,7 @@ int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_format_call
                "no-overwrite",
                "percore",
                "aux-output",
+               "aux-action=(pause|resume|start-paused)",
                "aux-sample-size=number",
        };
        struct perf_pmu_format *format;