From eecee160cb9f45894e29222adeb5e027dd2faa5f Mon Sep 17 00:00:00 2001 From: Ian Rogers Date: Tue, 19 May 2020 23:36:52 -0700 Subject: [PATCH 193/201] perf expr: Allow numbers to be followed by a dot mainline inclusion from mainline-v5.8-rc1 commit a45badc7392b4613708748f6a2cc0c6f63a1c8d6 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a45badc7392b4613708748f6a2cc0c6f63a1c8d6 ---------------------------------------------------------------------- Metrics like UNC_M_POWER_SELF_REFRESH encode 100 as "100." and consequently the 100 is treated as a symbol. Alter the regular expression to allow the dot to be before or after the number. Note, this passed the pmu-events test as that tests the validity of a number using strtod rather than lex code. strtod allows the dot after. Add a test for this behavior. Fixes: 26226a97724d (perf expr: Move expr lexer to flex) Signed-off-by: Ian Rogers Acked-by: Jiri Olsa Cc: Alexander Shishkin Cc: John Garry Cc: Mark Rutland Cc: Namhyung Kim Cc: Paul Clarke Cc: Peter Zijlstra Cc: Stephane Eranian Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: hongrongxuan --- tools/perf/tests/expr.c | 1 + tools/perf/util/expr.l | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/tests/expr.c b/tools/perf/tests/expr.c index 9f7d8ee21d89..576bd4af5720 100644 --- a/tools/perf/tests/expr.c +++ b/tools/perf/tests/expr.c @@ -37,6 +37,7 @@ int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused) ret |= test(&ctx, "max(1,2) + 1", 3); ret |= test(&ctx, "1+1 if 3*4 else 0", 2); ret |= test(&ctx, "1.1 + 2.1", 3.2); + ret |= test(&ctx, ".1 + 2.", 2.1); if (ret) return ret; diff --git a/tools/perf/util/expr.l b/tools/perf/util/expr.l index ceab11bea6f9..f397bf8b1a48 100644 --- a/tools/perf/util/expr.l +++ b/tools/perf/util/expr.l @@ -81,7 +81,7 @@ static int str(yyscan_t scanner, int token, int runtime) } %} -number [0-9]*\.?[0-9]+ +number ([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+) sch [-,=] spec \\{sch} -- 2.27.0