summaryrefslogtreecommitdiff
path: root/tools/perf/util/pmu.l
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2023-04-06 09:52:23 +0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2023-04-07 03:40:28 +0300
commit3d88aec0d42eec26b633fb2a473e294a1125bbd7 (patch)
tree863dfa7c6b567419ded68258bd4d774a9de733c6 /tools/perf/util/pmu.l
parente5116f46d44b72ede59a6923829f68a8b8f84e76 (diff)
downloadlinux-3d88aec0d42eec26b633fb2a473e294a1125bbd7.tar.xz
perf pmu: Make parser reentrant
By default bison uses global state for compatibility with yacc. Make the parser reentrant so that it may be used in asynchronous and multithreaded situations. Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Gaosheng Cui <cuigaosheng1@huawei.com> Cc: German Gomez <german.gomez@arm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jing Zhang <renyu.zj@linux.alibaba.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Rob Herring <robh@kernel.org> Cc: Sean Christopherson <seanjc@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20230406065224.2553640-1-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/pmu.l')
-rw-r--r--tools/perf/util/pmu.l17
1 files changed, 12 insertions, 5 deletions
diff --git a/tools/perf/util/pmu.l b/tools/perf/util/pmu.l
index 58b4926cfaca..67b247be693b 100644
--- a/tools/perf/util/pmu.l
+++ b/tools/perf/util/pmu.l
@@ -1,4 +1,6 @@
%option prefix="perf_pmu_"
+%option reentrant
+%option bison-bridge
%{
#include <stdlib.h>
@@ -6,16 +8,21 @@
#include "pmu.h"
#include "pmu-bison.h"
-static int value(int base)
+char *perf_pmu_get_text(yyscan_t yyscanner);
+YYSTYPE *perf_pmu_get_lval(yyscan_t yyscanner);
+
+static int value(yyscan_t scanner, int base)
{
+ YYSTYPE *yylval = perf_pmu_get_lval(scanner);
+ char *text = perf_pmu_get_text(scanner);
long num;
errno = 0;
- num = strtoul(perf_pmu_text, NULL, base);
+ num = strtoul(text, NULL, base);
if (errno)
return PP_ERROR;
- perf_pmu_lval.num = num;
+ yylval->num = num;
return PP_VALUE;
}
@@ -25,7 +32,7 @@ num_dec [0-9]+
%%
-{num_dec} { return value(10); }
+{num_dec} { return value(yyscanner, 10); }
config { return PP_CONFIG; }
- { return '-'; }
: { return ':'; }
@@ -35,7 +42,7 @@ config { return PP_CONFIG; }
%%
-int perf_pmu_wrap(void)
+int perf_pmu_wrap(void *scanner __maybe_unused)
{
return 1;
}