perf tools: Fix legacy events symbol separator parsing
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>
This commit is contained in:
parent
5ff328836d
commit
714a92d83f
|
@ -1330,6 +1330,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;
|
||||
|
@ -1670,6 +1690,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,
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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: '/' '/' | ':' |
|
||||
|
||||
%%
|
||||
|
||||
|
|
Loading…
Reference in New Issue