diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-12-08 05:50:24 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-12-08 05:50:24 -0500 |
| commit | 2a2662bf88e693d477ef08351d03934f7bc0b51c (patch) | |
| tree | cef243df159cc12ada7e97998a253df7c0abb2a2 /tools/perf/tests/parse-events.c | |
| parent | b2776bf7149bddd1f4161f14f79520f17fc1d71d (diff) | |
| parent | 36748b9518a2437beffe861b47dff6d12b736b3f (diff) | |
Merge branch 'perf/core-v3' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks into perf/hw_breakpoints
Pull AMD range breakpoints support from Frederic Weisbecker:
" - Extend breakpoint tools and core to support address range through perf
event with initial backend support for AMD extended breakpoints.
Syntax is:
perf record -e mem:addr/len:type
For example set write breakpoint from 0x1000 to 0x1200 (0x1000 + 512)
perf record -e mem:0x1000/512:w
- Clean up a bit breakpoint code validation
It has been acked by Jiri and Oleg. "
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/tests/parse-events.c')
| -rw-r--r-- | tools/perf/tests/parse-events.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 7f2f51f93619..4169f460efa1 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c | |||
| @@ -1145,6 +1145,49 @@ static int test__pinned_group(struct perf_evlist *evlist) | |||
| 1145 | return 0; | 1145 | return 0; |
| 1146 | } | 1146 | } |
| 1147 | 1147 | ||
| 1148 | static int test__checkevent_breakpoint_len(struct perf_evlist *evlist) | ||
| 1149 | { | ||
| 1150 | struct perf_evsel *evsel = perf_evlist__first(evlist); | ||
| 1151 | |||
| 1152 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
| 1153 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
| 1154 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
| 1155 | TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == | ||
| 1156 | evsel->attr.bp_type); | ||
| 1157 | TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == | ||
| 1158 | evsel->attr.bp_len); | ||
| 1159 | |||
| 1160 | return 0; | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | static int test__checkevent_breakpoint_len_w(struct perf_evlist *evlist) | ||
| 1164 | { | ||
| 1165 | struct perf_evsel *evsel = perf_evlist__first(evlist); | ||
| 1166 | |||
| 1167 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
| 1168 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
| 1169 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
| 1170 | TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == | ||
| 1171 | evsel->attr.bp_type); | ||
| 1172 | TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == | ||
| 1173 | evsel->attr.bp_len); | ||
| 1174 | |||
| 1175 | return 0; | ||
| 1176 | } | ||
| 1177 | |||
| 1178 | static int | ||
| 1179 | test__checkevent_breakpoint_len_rw_modifier(struct perf_evlist *evlist) | ||
| 1180 | { | ||
| 1181 | struct perf_evsel *evsel = perf_evlist__first(evlist); | ||
| 1182 | |||
| 1183 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 1184 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
| 1185 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 1186 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 1187 | |||
| 1188 | return test__checkevent_breakpoint_rw(evlist); | ||
| 1189 | } | ||
| 1190 | |||
| 1148 | static int count_tracepoints(void) | 1191 | static int count_tracepoints(void) |
| 1149 | { | 1192 | { |
| 1150 | char events_path[PATH_MAX]; | 1193 | char events_path[PATH_MAX]; |
| @@ -1420,6 +1463,21 @@ static struct evlist_test test__events[] = { | |||
| 1420 | .check = test__pinned_group, | 1463 | .check = test__pinned_group, |
| 1421 | .id = 41, | 1464 | .id = 41, |
| 1422 | }, | 1465 | }, |
| 1466 | { | ||
| 1467 | .name = "mem:0/1", | ||
| 1468 | .check = test__checkevent_breakpoint_len, | ||
| 1469 | .id = 42, | ||
| 1470 | }, | ||
| 1471 | { | ||
| 1472 | .name = "mem:0/2:w", | ||
| 1473 | .check = test__checkevent_breakpoint_len_w, | ||
| 1474 | .id = 43, | ||
| 1475 | }, | ||
| 1476 | { | ||
| 1477 | .name = "mem:0/4:rw:u", | ||
| 1478 | .check = test__checkevent_breakpoint_len_rw_modifier, | ||
| 1479 | .id = 44 | ||
| 1480 | }, | ||
| 1423 | #if defined(__s390x__) | 1481 | #if defined(__s390x__) |
| 1424 | { | 1482 | { |
| 1425 | .name = "kvm-s390:kvm_s390_create_vm", | 1483 | .name = "kvm-s390:kvm_s390_create_vm", |
