Closed
Description
When the kernel is compiled with CONFIG_RCU_EXPERT=y
and CONFIG_PROVE_RCU_LIST=y
(see this discussion), we have this warning when using MPTCP for the first time:
./diag.sh
TAP version 13
1..1
[ 7.650529][ T176]
[ 7.650703][ T176] =============================
[ 7.651494][ T176] WARNING: suspicious RCU usage
[ 7.652694][ T176] 6.12.0-rc2+ #1 Tainted: G N
[ 7.653105][ T176] -----------------------------
[ 7.653727][ T176] net/mptcp/sched.c:44 RCU-list traversed in non-reader section!!
[ 7.654413][ T176]
[ 7.654413][ T176] other info that might help us debug this:
[ 7.654413][ T176]
[ 7.656017][ T176]
[ 7.656017][ T176] rcu_scheduler_active = 2, debug_locks = 1
[ 7.657948][ T176] no locks held by mptcp_connect/176.
[ 7.659075][ T176]
[ 7.659075][ T176] stack backtrace:
[ 7.660132][ T176] CPU: 0 UID: 0 PID: 176 Comm: mptcp_connect Tainted: G N 6.12.0-rc2+ #1
[ 7.660838][ T176] Tainted: [N]=TEST
[ 7.661162][ T176] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[ 7.661818][ T176] Call Trace:
[ 7.662351][ T176] <TASK>
[ 7.662636][ T176] dump_stack_lvl (lib/dump_stack.c:123)
[ 7.663298][ T176] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
[ 7.663812][ T176] mptcp_sched_find (net/mptcp/sched.c:44 (discriminator 7))
[ 7.664509][ T176] mptcp_init_sock (net/mptcp/protocol.c:2867 (discriminator 1))
[ 7.665099][ T176] ? sock_init_data_uid (arch/x86/include/asm/atomic.h:28)
[ 7.665659][ T176] inet_create.part.0.constprop.0 (net/ipv4/af_inet.c:386)
[ 7.666056][ T176] ? __sock_create (include/linux/rcupdate.h:347 (discriminator 1))
[ 7.666470][ T176] __sock_create (net/socket.c:1576)
[ 7.666949][ T176] __sys_socket (net/socket.c:1671)
[ 7.667387][ T176] ? __pfx___sys_socket (net/socket.c:1712)
[ 7.667713][ T176] ? do_user_addr_fault (arch/x86/mm/fault.c:1419 (discriminator 1))
[ 7.668181][ T176] __x64_sys_socket (net/socket.c:1728)
[ 7.668753][ T176] do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1))
[ 7.669200][ T176] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
[ 7.669797][ T176] RIP: 0033:0x7f86d171f2eb
[ 7.670316][ T176] Code: 48 8b 55 f8 64 48 2b 14 25 28 00 00 00 75 02 c9 c3 e8 b9 bb 00 00 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 29 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d fd 6a 0d 00 f7 d8 64 89 01 48
All code
========
0: 48 8b 55 f8 mov -0x8(%rbp),%rdx
4: 64 48 2b 14 25 28 00 sub %fs:0x28,%rdx
b: 00 00
d: 75 02 jne 0x11
f: c9 leave
10: c3 ret
11: e8 b9 bb 00 00 call 0xbbcf
16: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
1d: 00 00
1f: f3 0f 1e fa endbr64
23: b8 29 00 00 00 mov $0x29,%eax
28: 0f 05 syscall
2a:* 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax <-- trapping instruction
30: 73 01 jae 0x33
32: c3 ret
33: 48 8b 0d fd 6a 0d 00 mov 0xd6afd(%rip),%rcx # 0xd6b37
3a: f7 d8 neg %eax
3c: 64 89 01 mov %eax,%fs:(%rcx)
3f: 48 rex.W
Code starting with the faulting instruction
===========================================
0: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax
6: 73 01 jae 0x9
8: c3 ret
9: 48 8b 0d fd 6a 0d 00 mov 0xd6afd(%rip),%rcx # 0xd6b0d
10: f7 d8 neg %eax
12: 64 89 01 mov %eax,%fs:(%rcx)
15: 48 rex.W
[ 7.671651][ T176] RSP: 002b:00007ffe051a5378 EFLAGS: 00000206 ORIG_RAX: 0000000000000029
[ 7.672176][ T176] RAX: ffffffffffffffda RBX: 00007ffe051a6a92 RCX: 00007f86d171f2eb
[ 7.672724][ T176] RDX: 0000000000000106 RSI: 0000000000000001 RDI: 0000000000000002
[ 7.673280][ T176] RBP: 000055d9c45fd2a0 R08: 00007f86d17f6b20 R09: 0000000000000050
[ 7.673839][ T176] R10: 0000000000000001 R11: 0000000000000206 R12: 0000000000000106
[ 7.674577][ T176] R13: 000055d988966bd8 R14: 000055d988968c28 R15: 000055d988966edb
[ 7.675485][ T176] </TASK>