[PATCH 0/4] perf/arm-cmn: Add CMN-650 and CMN-700
Qian Cai
quic_qiancai at quicinc.com
Tue May 10 10:15:20 PDT 2022
On Mon, Apr 18, 2022 at 11:57:37PM +0100, Robin Murphy wrote:
> Hi Will,
>
> As promised last time, here are the patches adding yet more inscrutable
> support for the other new members of the CMN family. I'm not sure if any
> of the folks who want this are the kind to give upstream feedback, but
> we can always live in hope... A colleague has kindly managed to briefly
> sanity-check the CMN-700 support under RTL emulation, but otherwise I've
> only been able to test the refactorings in terms of not breaking my
> little CMN-600 platform. Still, I'm pretty confident that that's caught
> all the stupids, and the rest is mostly just yet more events, so I
> don't think anything's particularly high-risk here.
>
> Cheers,
> Robin.
>
>
> Robin Murphy (4):
> dt-bindings: perf: arm-cmn: Add CMN-650 and CMN-700
> perf/arm-cmn: Add CMN-650 support
> perf/arm-cmn: Refactor occupancy filter selector
> perf/arm-cmn: Add CMN-700 support
>
> .../devicetree/bindings/perf/arm,cmn.yaml | 2 +
> drivers/perf/arm-cmn.c | 606 ++++++++++++++----
> 2 files changed, 485 insertions(+), 123 deletions(-)
Reverting this series fixed a null-ptr-deref while running some syscall
fuzzers by an unprivileged user on a Neoverse-N1 server with two CMN-600
(one for each socket).
KASAN: null-ptr-deref in range [0x0000000000000038-0x000000000000003f]
Mem abort info:
ESR = 0x0000000096000004
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: level 0 translation fault
Data abort info:
ISV = 0, ISS = 0x00000004
CM = 0, WnR = 0
[dfff800000000007] address between user and kernel address ranges
Internal error: Oops: 96000004 [#1] PREEMPT SMP
CPU: 7 PID: 115283 Comm: trinity-c57 Not tainted 5.18.0-rc6-next-20220510-dirty #93
pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : arm_cmn_event_init [arm_cmn]
lr : perf_try_init_event
sp : ffff800058eb7a00
x29: ffff800058eb7a10 x28: ffff080232bed880 x27: ffff400ccef2e120
x26: ffff400ccef2e280 x25: 000000000000001f x24: 0000000000000003
x23: 0000000000000001 x22: dfff800000000000 x21: 0000000000000219
x20: ffffb0f539491e88 x19: 0000000000000000 x18: 0000000000000000
x17: 0000000000000000 x16: 0000000000000000 x15: 0000aaaae0821540
x14: 0000000000000028 x13: 0000000000000000 x12: ffff70000b1d6f03
x11: 1ffff0000b1d6f02 x10: ffff70000b1d6f02 x9 : ffffb0f572260468
x8 : ffff800058eb7817 x7 : ffff400ccef2e200 x6 : 1fffe80199de5c40
x5 : ffffb0f53948fa00 x4 : 0000000000000000 x3 : ffff080232bed8e0
x2 : ffffb0f539491efc x1 : 0000000000000007 x0 : 0000000000000038
Call trace:
arm_cmn_event_init [arm_cmn]
perf_try_init_event
perf_init_event
perf_event_alloc
__do_sys_perf_event_open
__arm64_sys_perf_event_open
invoke_syscall
el0_svc_common.constprop.0
do_el0_svc
el0_svc
el0t_64_sync_handler
el0t_64_sync
Code: 35002a21 f9400293 9100e260 d343fc01 (38f66821)
---[ end trace 0000000000000000 ]---
Kernel panic - not syncing: Oops: Fatal exception
SMP: stopping secondary CPUs
Kernel Offset: 0x30f569c50000 from 0xffff800008000000
PHYS_OFFSET: 0x80000000
CPU features: 0x000,0042e015,19801c82
Memory Limit: none
0x3e6c is in arm_cmn_event_init (drivers/perf/arm-cmn.c:1528).
1523 }
1524
1525
1526 static int arm_cmn_event_init(struct perf_event *event)
1527 {
1528 struct arm_cmn *cmn = to_cmn(event->pmu);
1529 struct arm_cmn_hw_event *hw = to_cmn_hw(event);
1530 struct arm_cmn_node *dn;
1531 enum cmn_node_type type;
1532 bool bynodeid;
# "map_1" has the same content.
$ sudo cat /sys/kernel/debug/arm-cmn/map
X 0 1 2 3 4 5 6 7
Y P D+--------+--------+--------+--------+--------+--------+--------+--------+
5 | XP #40 | XP #41 | XP #42 | XP #43 | XP #44 | XP #45 | XP #46 | XP #47 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | CXRH | HN-I | HN-I | HN-I | HN-D | HN-I | HN-I | CXRH |
0| #2 | #3 | #4 | #5 | #0 | #6 | #7 | #3 |
1| | | | | | | | |
1 | RN-D | RN-D | RN-D | RN-I | RN-I | RN-D | RN-D | RN-D |
0| #2 | #3 | #4 | #10 | #11 | #5 | #6 | #7 |
1| | | | | | | | |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
4 | XP #32 | XP #33 | XP #34 | XP #35 | XP #36 | XP #37 | XP #38 | XP #39 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | SN-F | RN-F_B | RN-I | RN-F_B | RN-F_B | RN-I | RN-F_B | SN-F |
0| | | #8 | | | #9 | | |
1| | | | | | | | |
1 | | RN-F_B | | RN-F_B | RN-F_B | | RN-F_B | |
0| #24 | | #26 | | | #28 | | #30 |
1| #25 | | #27 | | | #29 | | #31 |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
3 | XP #24 | XP #25 | XP #26 | XP #27 | XP #28 | XP #29 | XP #30 | XP #31 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | SN-F | RN-F_B | RN-I | RN-F_B | RN-F_B | RN-I | RN-F_B | SN-F |
0| | | #6 | | | #7 | | |
1| | | | | | | | |
1 | | RN-F_B | | RN-F_B | RN-F_B | | RN-F_B | |
0| #16 | | #18 | | | #20 | | #22 |
1| #17 | | #19 | | | #21 | | #23 |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
2 | XP #16 | XP #17 | XP #18 | XP #19 | XP #20 | XP #21 | XP #22 | XP #23 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | SN-F | RN-F_B | RN-I | RN-F_B | RN-F_B | RN-I | RN-F_B | SN-F |
0| | | #4 | | | #5 | | |
1| | | | | | | | |
1 | | RN-F_B | | RN-F_B | RN-F_B | | RN-F_B | |
0| #8 | | #10 | | | #12 | | #14 |
1| #9 | | #11 | | | #13 | | #15 |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
1 | XP #8 | XP #9 | XP #10 | XP #11 | XP #12 | XP #13 | XP #14 | XP #15 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | SN-F | RN-F_B | RN-I | RN-F_B | RN-F_B | RN-I | RN-F_B | SN-F |
0| | | #2 | | | #3 | | |
1| | | | | | | | |
1 | | RN-F_B | | RN-F_B | RN-F_B | | RN-F_B | |
0| #0 | | #2 | | | #4 | | #6 |
1| #1 | | #3 | | | #5 | | #7 |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
0 | XP #0 | XP #1 | XP #2 | XP #3 | XP #4 | XP #5 | XP #6 | XP #7 |
| DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 | DTC 0 |
|........|........|........|........|........|........|........|........|
0 | CXRH | RN-F_B | RN-I | RN-F_B | RN-F_B | RN-I | RN-F_B | CXRH |
0| #0 | | #0 | | | #1 | | #1 |
1| | | | | | | | |
1 | RN-D | RN-F_B | HN-I | RN-F_B | RN-F_B | HN-I | RN-F_B | RN-D |
0| #0 | | #1 | | | #2 | | #1 |
1| | | | | | | | |
-----+--------+--------+--------+--------+--------+--------+--------+--------+
More information about the linux-arm-kernel
mailing list