From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Michael Petlan <mpetlan@redhat.com>,
Ian Rogers <irogers@google.com>,
Stephane Eranian <eranian@google.com>,
Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 03/14] perf tools: Add struct parse_events_state pointer to scanner
Date: Mon, 25 May 2020 00:42:08 +0200 [thread overview]
Message-ID: <20200524224219.234847-4-jolsa@kernel.org> (raw)
In-Reply-To: <20200524224219.234847-1-jolsa@kernel.org>
We need to pass more data to the scanner so let's
start with having it to take pointer to struct
parse_events_state object instead of just start
token.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
tools/perf/util/parse-events.c | 15 +++++++++------
tools/perf/util/parse-events.h | 1 +
tools/perf/util/parse-events.l | 8 ++++----
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index e0ccf027d214..27b8e49d690e 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -26,7 +26,7 @@
#include <api/fs/tracing_path.h>
#include <perf/cpumap.h>
#include "parse-events-bison.h"
-#define YY_EXTRA_TYPE int
+#define YY_EXTRA_TYPE void*
#include "parse-events-flex.h"
#include "pmu.h"
#include "thread_map.h"
@@ -2027,13 +2027,14 @@ perf_pmu__parse_check(const char *name)
return r ? r->type : PMU_EVENT_SYMBOL_ERR;
}
-static int parse_events__scanner(const char *str, void *parse_state, int start_token)
+static int parse_events__scanner(const char *str,
+ struct parse_events_state *parse_state)
{
YY_BUFFER_STATE buffer;
void *scanner;
int ret;
- ret = parse_events_lex_init_extra(start_token, &scanner);
+ ret = parse_events_lex_init_extra(parse_state, &scanner);
if (ret)
return ret;
@@ -2057,11 +2058,12 @@ static int parse_events__scanner(const char *str, void *parse_state, int start_t
int parse_events_terms(struct list_head *terms, const char *str)
{
struct parse_events_state parse_state = {
- .terms = NULL,
+ .terms = NULL,
+ .stoken = PE_START_TERMS,
};
int ret;
- ret = parse_events__scanner(str, &parse_state, PE_START_TERMS);
+ ret = parse_events__scanner(str, &parse_state);
if (!ret) {
list_splice(parse_state.terms, terms);
zfree(&parse_state.terms);
@@ -2080,10 +2082,11 @@ int parse_events(struct evlist *evlist, const char *str,
.idx = evlist->core.nr_entries,
.error = err,
.evlist = evlist,
+ .stoken = PE_START_EVENTS,
};
int ret;
- ret = parse_events__scanner(str, &parse_state, PE_START_EVENTS);
+ ret = parse_events__scanner(str, &parse_state);
perf_pmu__parse_cleanup();
if (!ret && list_empty(&parse_state.list)) {
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 6ead9661238c..d60510e0609f 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -128,6 +128,7 @@ struct parse_events_state {
struct parse_events_error *error;
struct evlist *evlist;
struct list_head *terms;
+ int stoken;
};
void parse_events__handle_error(struct parse_events_error *err, int idx,
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 394132254447..002802e17059 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -209,10 +209,10 @@ modifier_bp [rwx]{1,3}
%%
%{
- {
- int start_token;
+ struct parse_events_state *_parse_state = parse_events_get_extra(yyscanner);
- start_token = parse_events_get_extra(yyscanner);
+ {
+ int start_token = _parse_state->stoken;
if (start_token == PE_START_TERMS)
BEGIN(config);
@@ -220,7 +220,7 @@ modifier_bp [rwx]{1,3}
BEGIN(event);
if (start_token) {
- parse_events_set_extra(NULL, yyscanner);
+ _parse_state->stoken = 0;
/*
* The flex parser does not init locations variable
* via the scan_string interface, so we need do the
--
2.25.4
next prev parent reply other threads:[~2020-05-24 22:42 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-24 22:42 [RFC 00/14] perf tests: Check on subtest for user specified test Jiri Olsa
2020-05-24 22:42 ` [PATCH 01/14] " Jiri Olsa
2020-05-24 22:42 ` [PATCH 02/14] perf tools: Do not pass avg to generic_metric Jiri Olsa
2020-05-24 22:42 ` Jiri Olsa [this message]
2020-05-24 22:42 ` [PATCH 04/14] perf tools: Add fake pmu support Jiri Olsa
2020-06-01 7:22 ` Ian Rogers
2020-06-01 9:06 ` Jiri Olsa
2020-05-24 22:42 ` [PATCH 05/14] perf tools: Add parse_events_fake interface Jiri Olsa
2020-06-01 7:28 ` Ian Rogers
2020-06-01 9:08 ` Jiri Olsa
2020-06-01 15:04 ` Arnaldo Carvalho de Melo
2020-06-01 15:49 ` Jiri Olsa
2020-05-24 22:42 ` [PATCH 06/14] perf tests: Add another pmu-events tests Jiri Olsa
2020-06-01 7:44 ` Ian Rogers
2020-06-01 13:21 ` Jiri Olsa
2020-06-01 16:23 ` Ian Rogers
2020-05-24 22:42 ` [PATCH 07/14] perf tools: Factor out parse_groups function Jiri Olsa
2020-05-24 22:42 ` [PATCH 08/14] perf tools: Add metricgroup__parse_groups_test function Jiri Olsa
2020-05-24 22:42 ` [PATCH 09/14] perf tools: Add fake_pmu to parse_events function Jiri Olsa
2020-05-24 22:42 ` [PATCH 10/14] perf tools: Add map " Jiri Olsa
2020-05-24 22:42 ` [PATCH 11/14] perf tools: Factor out prepare_metric function Jiri Olsa
2020-05-24 22:42 ` [PATCH 12/14] perf tools: Add test_generic_metric function Jiri Olsa
2020-05-24 22:42 ` [PATCH 13/14] perf tests: Add parse metric test for ipc metric Jiri Olsa
2020-06-01 7:55 ` Ian Rogers
2020-06-01 13:09 ` Jiri Olsa
2020-06-01 16:12 ` Ian Rogers
2020-06-01 15:08 ` Arnaldo Carvalho de Melo
2020-06-01 15:49 ` Jiri Olsa
2020-05-24 22:42 ` [PATCH 14/14] perf tests: Add parse metric test for frontend metric Jiri Olsa
2020-06-01 8:06 ` Ian Rogers
2020-06-01 15:08 ` Arnaldo Carvalho de Melo
2020-05-25 12:06 ` [RFC 00/14] perf tests: Check on subtest for user specified test Michael Petlan
2020-05-25 12:35 ` Jiri Olsa
2020-05-25 14:23 ` Arnaldo Carvalho de Melo
2020-05-26 11:15 ` Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200524224219.234847-4-jolsa@kernel.org \
--to=jolsa@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=eranian@google.com \
--cc=irogers@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mpetlan@redhat.com \
--cc=namhyung@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.