1 | // SPDX-License-Identifier: GPL-2.0-only |
---|---|
2 | /* |
3 | * Copyright 2014, Michael Ellerman, IBM Corp. |
4 | */ |
5 | |
6 | #include <stdio.h> |
7 | #include <stdlib.h> |
8 | #include <setjmp.h> |
9 | #include <signal.h> |
10 | |
11 | #include "ebb.h" |
12 | |
13 | |
14 | /* Test that things work sanely if we have no handler */ |
15 | |
16 | static int no_handler_test(void) |
17 | { |
18 | struct event event; |
19 | u64 val; |
20 | int i; |
21 | |
22 | SKIP_IF(!ebb_is_supported()); |
23 | |
24 | event_init_named(e: &event, config: 0x1001e, name: "cycles"); |
25 | event_leader_ebb_init(e: &event); |
26 | |
27 | event.attr.exclude_kernel = 1; |
28 | event.attr.exclude_hv = 1; |
29 | event.attr.exclude_idle = 1; |
30 | |
31 | FAIL_IF(event_open(e: &event)); |
32 | FAIL_IF(ebb_event_enable(e: &event)); |
33 | |
34 | val = mfspr(SPRN_EBBHR); |
35 | FAIL_IF(val != 0); |
36 | |
37 | /* Make sure it overflows quickly */ |
38 | sample_period = 1000; |
39 | mtspr(SPRN_PMC1, pmc_sample_period(value: sample_period)); |
40 | |
41 | /* Spin to make sure the event has time to overflow */ |
42 | for (i = 0; i < 1000; i++) |
43 | mb(); |
44 | |
45 | dump_ebb_state(); |
46 | |
47 | /* We expect to see the PMU frozen & PMAO set */ |
48 | val = mfspr(SPRN_MMCR0); |
49 | FAIL_IF(val != 0x0000000080000080); |
50 | |
51 | event_close(e: &event); |
52 | |
53 | /* The real test is that we never took an EBB at 0x0 */ |
54 | |
55 | return 0; |
56 | } |
57 | |
58 | int main(void) |
59 | { |
60 | return test_harness(no_handler_test,"no_handler_test"); |
61 | } |
62 |