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.

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
Acked-by: Ian Rogers <irog...@google.com>
Reviewed-by: Andi Kleen <a...@linux.intel.com>
---


Changes in V7:

        Add aux-action to perf_pmu__for_each_format


 tools/perf/util/evsel.c        |  2 ++
 tools/perf/util/evsel_config.h |  1 +
 tools/perf/util/parse-events.c | 10 ++++++++++
 tools/perf/util/parse-events.h |  1 +
 tools/perf/util/parse-events.l |  1 +
 tools/perf/util/pmu.c          |  1 +
 6 files changed, 16 insertions(+)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index dbf9c8cee3c5..6aff26636152 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1017,6 +1017,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;
diff --git a/tools/perf/util/evsel_config.h b/tools/perf/util/evsel_config.h
index aee6f808b512..af52a1516d0b 100644
--- a/tools/perf/util/evsel_config.h
+++ b/tools/perf/util/evsel_config.h
@@ -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,
 };
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 9a8be1e46d67..31705b6a41b9 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -821,6 +821,7 @@ static const char *config_term_name(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",
@@ -870,6 +871,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:
@@ -989,6 +991,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) {
@@ -1106,6 +1111,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:
@@ -1241,6 +1247,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);
@@ -1303,6 +1312,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:
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 10cc9c433116..ac3f5acbf0ab 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -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,
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 5a0bcd7f166a..6fa4b74fe0c3 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -329,6 +329,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); }
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 61bdda01a05a..dee39d53bab4 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -1737,6 +1737,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;
-- 
2.43.0


Reply via email to