From: Jiri Olsa <jo...@kernel.org>

Add the expr_scanner_ctx object to hold user data for the expr scanner.
Currently it holds only start_token, Kajol Jain will use it to hold 24x7
runtime param.

Signed-off-by: Jiri Olsa <jo...@kernel.org>
Cc: Alexander Shishkin <alexander.shish...@linux.intel.com>
Cc: Andi Kleen <a...@linux.intel.com>
Cc: Anju T Sudhakar <a...@linux.vnet.ibm.com>
Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Cc: Jin Yao <yao....@linux.intel.com>
Cc: Joe Mario <jma...@redhat.com>
Cc: Kajol Jain <kj...@linux.ibm.com>
Cc: Kan Liang <kan.li...@linux.intel.com>
Cc: Madhavan Srinivasan <ma...@linux.vnet.ibm.com>
Cc: Mamatha Inamdar <mamat...@linux.vnet.ibm.com>
Cc: Mark Rutland <mark.rutl...@arm.com>
Cc: Michael Ellerman <m...@ellerman.id.au>
Cc: Michael Petlan <mpet...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Paul Mackerras <pau...@ozlabs.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Ravi Bangoria <ravi.bango...@linux.ibm.com>
Cc: Sukadev Bhattiprolu <suka...@linux.vnet.ibm.com>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lore.kernel.org/lkml/20200401203340.31402-3-kj...@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/expr.c |  6 ++++--
 tools/perf/util/expr.h |  4 ++++
 tools/perf/util/expr.l | 10 +++++-----
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
index c8ccc548a585..c3382d58cf40 100644
--- a/tools/perf/util/expr.c
+++ b/tools/perf/util/expr.c
@@ -3,7 +3,6 @@
 #include <assert.h>
 #include "expr.h"
 #include "expr-bison.h"
-#define YY_EXTRA_TYPE int
 #include "expr-flex.h"
 
 #ifdef PARSER_DEBUG
@@ -30,11 +29,14 @@ static int
 __expr__parse(double *val, struct expr_parse_ctx *ctx, const char *expr,
              int start)
 {
+       struct expr_scanner_ctx scanner_ctx = {
+               .start_token = start,
+       };
        YY_BUFFER_STATE buffer;
        void *scanner;
        int ret;
 
-       ret = expr_lex_init_extra(start, &scanner);
+       ret = expr_lex_init_extra(&scanner_ctx, &scanner);
        if (ret)
                return ret;
 
diff --git a/tools/perf/util/expr.h b/tools/perf/util/expr.h
index b9e53f2b5844..0938ad166ece 100644
--- a/tools/perf/util/expr.h
+++ b/tools/perf/util/expr.h
@@ -15,6 +15,10 @@ struct expr_parse_ctx {
        struct expr_parse_id ids[MAX_PARSE_ID];
 };
 
+struct expr_scanner_ctx {
+       int start_token;
+};
+
 void expr__ctx_init(struct expr_parse_ctx *ctx);
 void expr__add_id(struct expr_parse_ctx *ctx, const char *id, double val);
 int expr__parse(double *final_val, struct expr_parse_ctx *ctx, const char 
*expr);
diff --git a/tools/perf/util/expr.l b/tools/perf/util/expr.l
index eaad29243c23..2582c2464938 100644
--- a/tools/perf/util/expr.l
+++ b/tools/perf/util/expr.l
@@ -76,13 +76,13 @@ sym         [0-9a-zA-Z_\.:@]+
 symbol         {spec}*{sym}*{spec}*{sym}*
 
 %%
-       {
-               int start_token;
+       struct expr_scanner_ctx *sctx = expr_get_extra(yyscanner);
 
-               start_token = expr_get_extra(yyscanner);
+       {
+               int start_token = sctx->start_token;
 
-               if (start_token) {
-                       expr_set_extra(NULL, yyscanner);
+               if (sctx->start_token) {
+                       sctx->start_token = 0;
                        return start_token;
                }
        }
-- 
2.21.1

Reply via email to