Description of problem: kernel-selftests测试perf_events/sigtrap_threads执行失败,日志如下: # ./sigtrap_threads TAP version 13 1..5 # Starting 5 tests from 1 test cases. # RUN sigtrap_threads.remain_disabled ... # OK sigtrap_threads.remain_disabled ok 1 sigtrap_threads.remain_disabled # RUN sigtrap_threads.enable_event ... # sigtrap_threads.c:171:enable_event:Expected ctx.signal_count (0) == NUM_THREADS (5) # sigtrap_threads.c:172:enable_event:Expected ctx.tids_want_signal (59560) == 0 (0) # sigtrap_threads.c:173:enable_event:Expected ctx.first_siginfo.si_addr (0) == &ctx.iterate_on (4327904) # sigtrap_threads.c:174:enable_event:Expected ctx.first_siginfo.si_perf_type (0) == PERF_TYPE_BREAKPOINT (5) # sigtrap_threads.c:175:enable_event:Expected ctx.first_siginfo.si_perf_data (0) == TEST_SIG_DATA(&ctx.iterate_on, 0) (18446744073705223711) # sigtrap_threads.c:179:enable_event:Expected ctx.signal_count (0) == NUM_THREADS + 1 (6) # enable_event: Test failed at step #13 # FAIL sigtrap_threads.enable_event not ok 2 sigtrap_threads.enable_event # RUN sigtrap_threads.modify_and_enable_event ... # sigtrap_threads.c:190:modify_and_enable_event:Expected ctx.signal_count (0) == NUM_THREADS (5) # sigtrap_threads.c:191:modify_and_enable_event:Expected ctx.tids_want_signal (59590) == 0 (0) # sigtrap_threads.c:192:modify_and_enable_event:Expected ctx.first_siginfo.si_addr (0) == &ctx.iterate_on (4327904) # sigtrap_threads.c:193:modify_and_enable_event:Expected ctx.first_siginfo.si_perf_type (0) == PERF_TYPE_BREAKPOINT (5) # sigtrap_threads.c:194:modify_and_enable_event:Expected ctx.first_siginfo.si_perf_data (0) == TEST_SIG_DATA(&ctx.iterate_on, 42) (18446744073705223753) # sigtrap_threads.c:198:modify_and_enable_event:Expected ctx.signal_count (0) == NUM_THREADS + 1 (6) # modify_and_enable_event: Test failed at step #13 # FAIL sigtrap_threads.modify_and_enable_event not ok 3 sigtrap_threads.modify_and_enable_event # RUN sigtrap_threads.signal_stress ... # sigtrap_threads.c:210:signal_stress:Expected ctx.signal_count (7) == NUM_THREADS * ctx.iterate_on (15000) # sigtrap_threads.c:211:signal_stress:Expected ctx.tids_want_signal (178776530) == 0 (0) # signal_stress: Test failed at step #13 # FAIL sigtrap_threads.signal_stress not ok 4 sigtrap_threads.signal_stress # RUN sigtrap_threads.signal_stress_with_disable ... # OK sigtrap_threads.signal_stress_with_disable ok 5 sigtrap_threads.signal_stress_with_disable # FAILED: 2 / 5 tests passed. # Totals: pass:2 fail:3 xfail:0 xpass:0 skip:0 error:0 strace跟踪日志如下: execve("./sigtrap_threads", ["./sigtrap_threads"], 0xffffe4b5de70 /* 30 vars */) = 0 brk(NULL) = 0x5738000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffff814fa000 faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=18483, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 18483, PROT_READ, MAP_PRIVATE, 3, 0) = 0xffff814f5000 close(3) = 0 openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0\20y\2\0\0\0\0\0"..., 832) = 832 newfstatat(3, "", {st_mode=S_IFREG|0755, st_size=2637392, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 2199040, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_DENYWRITE, -1, 0) = 0xffff812a8000 mmap(0xffff812b0000, 2133504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0xffff812b0000 munmap(0xffff812a8000, 32768) = 0 munmap(0xffff814b9000, 32256) = 0 mprotect(0xffff8143c000, 69632, PROT_NONE) = 0 mmap(0xffff8144d000, 413696, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18d000) = 0xffff8144d000 mmap(0xffff814b2000, 28160, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffff814b2000 close(3) = 0 set_tid_address(0xffff814faed0) = 11952 set_robust_list(0xffff814faee0, 24) = 0 rseq(0xffff814fb520, 0x20, 0, 0xd428bc00) = 0 mprotect(0xffff8144d000, 405504, PROT_READ) = 0 mprotect(0x41f000, 4096, PROT_READ) = 0 mprotect(0xffff814ff000, 8192, PROT_READ) = 0 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0 munmap(0xffff814f5000, 18483) = 0 mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0) = 0xffff814f9000 newfstatat(1, "", {st_mode=S_IFREG|0600, st_size=1928, ...}, AT_EMPTY_PATH) = 0 getrandom("\x71\x0e\x2b\x77\x6f\xa0\xa0\xcf", 8, GRND_NONBLOCK) = 8 brk(NULL) = 0x5738000 brk(0x5759000) = 0x5759000 write(1, "TAP version 13\n", 15TAP version 13 ) = 15 write(1, "1..5\n", 51..5 ) = 5 write(1, "# Starting 5 tests from 1 test c"..., 38# Starting 5 tests from 1 test cases. ) = 38 write(1, "# RUN sigtrap_threads"..., 53# RUN sigtrap_threads.remain_disabled ... ) = 53 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xffff814faed0) = 11953 rt_sigaction(SIGALRM, {sa_handler=0x401a40, sa_mask=[], sa_flags=SA_SIGINFO}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0 wait4(11953, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 11953 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11953, si_uid=0, si_status=0, si_utime=0, si_stime=0} --- setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=29, tv_usec=969925}}) = 0 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 write(1, "# OK sigtrap_threads"..., 49# OK sigtrap_threads.remain_disabled ) = 49 write(1, "ok 1 sigtrap_threads.remain_disa"..., 37ok 1 sigtrap_threads.remain_disabled ) = 37 write(1, "# RUN sigtrap_threads"..., 50# RUN sigtrap_threads.enable_event ... ) = 50 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xffff814faed0) = 11959 rt_sigaction(SIGALRM, {sa_handler=0x401a40, sa_mask=[], sa_flags=SA_SIGINFO}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0 wait4(11959, # sigtrap_threads.c:171:enable_event:Expected ctx.signal_count (0) == NUM_THREADS (5) # sigtrap_threads.c:172:enable_event:Expected ctx.tids_want_signal (59810) == 0 (0) # sigtrap_threads.c:173:enable_event:Expected ctx.first_siginfo.si_addr (0) == &ctx.iterate_on (4327904) # sigtrap_threads.c:174:enable_event:Expected ctx.first_siginfo.si_perf_type (0) == PERF_TYPE_BREAKPOINT (5) # sigtrap_threads.c:175:enable_event:Expected ctx.first_siginfo.si_perf_data (0) == TEST_SIG_DATA(&ctx.iterate_on, 0) (18446744073705223711) # sigtrap_threads.c:179:enable_event:Expected ctx.signal_count (0) == NUM_THREADS + 1 (6) [{WIFEXITED(s) && WEXITSTATUS(s) == 13}], 0, NULL) = 11959 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11959, si_uid=0, si_status=13, si_utime=0, si_stime=0} --- setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=29, tv_usec=996571}}) = 0 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 write(2, "# enable_event: Test failed at s"..., 40# enable_event: Test failed at step #13 ) = 40 write(1, "# FAIL sigtrap_threads"..., 46# FAIL sigtrap_threads.enable_event ) = 46 write(1, "not ok 2 sigtrap_threads.enable_"..., 38not ok 2 sigtrap_threads.enable_event ) = 38 write(1, "# RUN sigtrap_threads"..., 61# RUN sigtrap_threads.modify_and_enable_event ... ) = 61 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xffff814faed0) = 11965 rt_sigaction(SIGALRM, {sa_handler=0x401a40, sa_mask=[], sa_flags=SA_SIGINFO}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0 wait4(11965, # sigtrap_threads.c:190:modify_and_enable_event:Expected ctx.signal_count (0) == NUM_THREADS (5) # sigtrap_threads.c:191:modify_and_enable_event:Expected ctx.tids_want_signal (59840) == 0 (0) # sigtrap_threads.c:192:modify_and_enable_event:Expected ctx.first_siginfo.si_addr (0) == &ctx.iterate_on (4327904) # sigtrap_threads.c:193:modify_and_enable_event:Expected ctx.first_siginfo.si_perf_type (0) == PERF_TYPE_BREAKPOINT (5) # sigtrap_threads.c:194:modify_and_enable_event:Expected ctx.first_siginfo.si_perf_data (0) == TEST_SIG_DATA(&ctx.iterate_on, 42) (18446744073705223753) # sigtrap_threads.c:198:modify_and_enable_event:Expected ctx.signal_count (0) == NUM_THREADS + 1 (6) [{WIFEXITED(s) && WEXITSTATUS(s) == 13}], 0, NULL) = 11965 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11965, si_uid=0, si_status=13, si_utime=0, si_stime=0} --- setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=29, tv_usec=996295}}) = 0 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 write(2, "# modify_and_enable_event: Test "..., 51# modify_and_enable_event: Test failed at step #13 ) = 51 write(1, "# FAIL sigtrap_threads"..., 57# FAIL sigtrap_threads.modify_and_enable_event ) = 57 write(1, "not ok 3 sigtrap_threads.modify_"..., 49not ok 3 sigtrap_threads.modify_and_enable_event ) = 49 write(1, "# RUN sigtrap_threads"..., 51# RUN sigtrap_threads.signal_stress ... ) = 51 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xffff814faed0) = 11971 rt_sigaction(SIGALRM, {sa_handler=0x401a40, sa_mask=[], sa_flags=SA_SIGINFO}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0 wait4(11971, # sigtrap_threads.c:210:signal_stress:Expected ctx.signal_count (14) == NUM_THREADS * ctx.iterate_on (15000) # sigtrap_threads.c:211:signal_stress:Expected ctx.tids_want_signal (179442363) == 0 (0) [{WIFEXITED(s) && WEXITSTATUS(s) == 13}], 0, NULL) = 11971 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11971, si_uid=0, si_status=13, si_utime=0, si_stime=2} --- setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=29, tv_usec=991946}}) = 0 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 write(2, "# signal_stress: Test failed at "..., 41# signal_stress: Test failed at step #13 ) = 41 write(1, "# FAIL sigtrap_threads"..., 47# FAIL sigtrap_threads.signal_stress ) = 47 write(1, "not ok 4 sigtrap_threads.signal_"..., 39not ok 4 sigtrap_threads.signal_stress ) = 39 write(1, "# RUN sigtrap_threads"..., 64# RUN sigtrap_threads.signal_stress_with_disable ... ) = 64 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xffff814faed0) = 11977 rt_sigaction(SIGALRM, {sa_handler=0x401a40, sa_mask=[], sa_flags=SA_SIGINFO}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}) = 0 wait4(11977, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 11977 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11977, si_uid=0, si_status=0, si_utime=15, si_stime=29} --- setitimer(ITIMER_REAL, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=0, tv_usec=0}}, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=29, tv_usec=876462}}) = 0 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 write(1, "# OK sigtrap_threads"..., 60# OK sigtrap_threads.signal_stress_with_disable ) = 60 write(1, "ok 5 sigtrap_threads.signal_stre"..., 48ok 5 sigtrap_threads.signal_stress_with_disable ) = 48 munmap(0xffff814f9000, 1024) = 0 write(1, "# FAILED: 2 / 5 tests passed.\n", 30# FAILED: 2 / 5 tests passed. ) = 30 write(1, "# Totals: pass:2 fail:3 xfail:0 "..., 55# Totals: pass:2 fail:3 xfail:0 xpass:0 skip:0 error:0 ) = 55 exit_group(1) = ? +++ exited with 1 +++ How reproducible: 必现 Steps to Reproduce: wget 内核对应src.rpm包 rpm -ivh xxx.src.rpm 默认安装到/root下 yum install yum-utils yum-builddep -y /root/rpmbuild/SPECS/kernel.spec 自动安装前置依赖包 需要yum-utils rpmbuild -bp /root/rpmbuild/SPECS/kernel.spec # 这个步骤会打相关的patch, 解压缩tar包,生成BUILD目录 cd /root/rpmbuild/BUILD/kernel-*/linux-* make -C tools/testing/selftests/ cd /root/rpmbuild/BUILD/kernel-*/linux-*/tools/testing/selftests/perf_events make ./sigtrap_threads Actual results: 用例执行fail Expected results: 用例执行通过 Additional info: [环境信息] ECS # uname -r 6.6.88-cbp.git.8c112c479.an23.aarch64 # free -h total used free shared buff/cache available Mem: 15Gi 884Mi 8.2Gi 7.2Mi 6.2Gi 14Gi Swap: 0B 0B 0B # lscpu Architecture: aarch64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Vendor ID: ARM BIOS Vendor ID: Alibaba Cloud Model name: Neoverse-N1 BIOS Model name: virt-rhel7.6.0 CPU @ 2.0GHz BIOS CPU family: 1 Model: 1 Thread(s) per core: 1 Core(s) per cluster: 4 Socket(s): 1 Cluster(s): 1 Stepping: r3p1 BogoMIPS: 50.00 Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp NUMA: NUMA node(s): 1 NUMA node0 CPU(s): 0-3 Vulnerabilities: Gather data sampling: Not affected Itlb multihit: Not affected L1tf: Not affected Mds: Not affected Meltdown: Not affected Mmio stale data: Not affected Reg file data sampling: Not affected Retbleed: Not affected Spec rstack overflow: Not affected Spec store bypass: Not affected Spectre v1: Mitigation; __user pointer sanitization Spectre v2: Mitigation; CSV2, but not BHB Srbds: Not affected Tsx async abort: Not affected