70 lines
2.4 KiB
Diff
70 lines
2.4 KiB
Diff
From eecee160cb9f45894e29222adeb5e027dd2faa5f Mon Sep 17 00:00:00 2001
|
|
From: Ian Rogers <irogers@google.com>
|
|
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 <irogers@google.com>
|
|
Acked-by: Jiri Olsa <jolsa@redhat.com>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: John Garry <john.garry@huawei.com>
|
|
Cc: Mark Rutland <mark.rutland@arm.com>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Cc: Paul Clarke <pc@us.ibm.com>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Cc: Stephane Eranian <eranian@google.com>
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
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
|
|
|