113 lines
3.4 KiB
Diff
113 lines
3.4 KiB
Diff
From 8d49212ae241e5352ea7fca8a14be4a34da70060 Mon Sep 17 00:00:00 2001
|
|
From: Jiri Olsa <jolsa@kernel.org>
|
|
Date: Wed, 13 Feb 2019 13:32:40 +0100
|
|
Subject: [PATCH 008/201] perf tools: Fix legacy events symbol separator
|
|
parsing
|
|
|
|
mainline inclusion
|
|
from mainline-v5.1-rc1
|
|
commit 714a92d83fd1e20461f53549cfbee77b20be5032
|
|
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=714a92d83fd1e20461f53549cfbee77b20be5032
|
|
|
|
-----------------------------------------------------------------
|
|
|
|
Fixing legacy symbol events parsing. We can't support single slash
|
|
separator, like 'cycles/u', because it conflicts with non empty terms,
|
|
like 'cycles/period/u'.
|
|
|
|
Keeping only '//' and ':' separator for these events:
|
|
cycles//u
|
|
cycles:k
|
|
|
|
And removing '/' separator support, which is not working
|
|
anymore. Also adding automated tests for above events.
|
|
|
|
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Cc: Peter Zijlstra <peterz@infradead.org>
|
|
Link: http://lkml.kernel.org/r/20190213123246.4015-5-jolsa@kernel.org
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/tests/parse-events.c | 30 ++++++++++++++++++++++++++++++
|
|
tools/perf/util/parse-events.y | 4 ++--
|
|
2 files changed, 32 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
|
|
index 532c95e8fa6b..8f3c80e13584 100644
|
|
--- a/tools/perf/tests/parse-events.c
|
|
+++ b/tools/perf/tests/parse-events.c
|
|
@@ -1356,6 +1356,26 @@ static int test__checkevent_complex_name(struct perf_evlist *evlist)
|
|
return 0;
|
|
}
|
|
|
|
+static int test__sym_event_slash(struct perf_evlist *evlist)
|
|
+{
|
|
+ struct perf_evsel *evsel = perf_evlist__first(evlist);
|
|
+
|
|
+ TEST_ASSERT_VAL("wrong type", evsel->attr.type == PERF_TYPE_HARDWARE);
|
|
+ TEST_ASSERT_VAL("wrong config", evsel->attr.config == PERF_COUNT_HW_CPU_CYCLES);
|
|
+ TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int test__sym_event_dc(struct perf_evlist *evlist)
|
|
+{
|
|
+ struct perf_evsel *evsel = perf_evlist__first(evlist);
|
|
+
|
|
+ TEST_ASSERT_VAL("wrong type", evsel->attr.type == PERF_TYPE_HARDWARE);
|
|
+ TEST_ASSERT_VAL("wrong config", evsel->attr.config == PERF_COUNT_HW_CPU_CYCLES);
|
|
+ TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int count_tracepoints(void)
|
|
{
|
|
struct dirent *events_ent;
|
|
@@ -1697,6 +1717,16 @@ static struct evlist_test test__events[] = {
|
|
.name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
|
|
.check = test__checkevent_complex_name,
|
|
.id = 53
|
|
+ },
|
|
+ {
|
|
+ .name = "cycles//u",
|
|
+ .check = test__sym_event_slash,
|
|
+ .id = 54,
|
|
+ },
|
|
+ {
|
|
+ .name = "cycles:k",
|
|
+ .check = test__sym_event_dc,
|
|
+ .id = 55,
|
|
}
|
|
};
|
|
|
|
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
|
|
index 8d7578be708a..5d5413c21b64 100644
|
|
--- a/tools/perf/util/parse-events.y
|
|
+++ b/tools/perf/util/parse-events.y
|
|
@@ -311,7 +311,7 @@ value_sym '/' event_config '/'
|
|
$$ = list;
|
|
}
|
|
|
|
|
-value_sym sep_slash_dc
|
|
+value_sym sep_slash_slash_dc
|
|
{
|
|
struct list_head *list;
|
|
int type = $1 >> 16;
|
|
@@ -702,7 +702,7 @@ PE_VALUE PE_ARRAY_RANGE PE_VALUE
|
|
|
|
sep_dc: ':' |
|
|
|
|
-sep_slash_dc: '/' | ':' |
|
|
+sep_slash_slash_dc: '/' '/' | ':' |
|
|
|
|
%%
|
|
|
|
--
|
|
2.27.0
|
|
|