Daisuke Matsuda
10af303192
RDMA/rxe: Fix spinlock recursion deadlock on requester
The following deadlock is observed:
Call Trace:
<IRQ>
_raw_spin_lock_bh+0x29/0x30
check_type_state.constprop.0+0x4e/0xc0 [rdma_rxe]
rxe_rcv+0x173/0x3d0 [rdma_rxe]
rxe_udp_encap_recv+0x69/0xd0 [rdma_rxe]
? __pfx_rxe_udp_encap_recv+0x10/0x10 [rdma_rxe]
udp_queue_rcv_one_skb+0x258/0x520
udp_unicast_rcv_skb+0x75/0x90
__udp4_lib_rcv+0x364/0x5c0
ip_protocol_deliver_rcu+0xa7/0x160
ip_local_deliver_finish+0x73/0xa0
ip_sublist_rcv_finish+0x80/0x90
ip_sublist_rcv+0x191/0x220
ip_list_rcv+0x132/0x160
__netif_receive_skb_list_core+0x297/0x2c0
netif_receive_skb_list_internal+0x1c5/0x300
napi_complete_done+0x6f/0x1b0
virtnet_poll+0x1f4/0x2d0 [virtio_net]
__napi_poll+0x2c/0x1b0
net_rx_action+0x293/0x350
? __napi_schedule+0x79/0x90
__do_softirq+0xcb/0x2ab
__irq_exit_rcu+0xb9/0xf0
common_interrupt+0x80/0xa0
</IRQ>
<TASK>
asm_common_interrupt+0x22/0x40
RIP: 0010:_raw_spin_lock+0x17/0x30
rxe_requester+0xe4/0x8f0 [rdma_rxe]
? xas_load+0x9/0xa0
? xa_load+0x70/0xb0
do_task+0x64/0x1f0 [rdma_rxe]
rxe_post_send+0x54/0x110 [rdma_rxe]
ib_uverbs_post_send+0x5f8/0x680 [ib_uverbs]
? netif_receive_skb_list_internal+0x1e3/0x300
ib_uverbs_write+0x3c8/0x500 [ib_uverbs]
vfs_write+0xc5/0x3b0
ksys_write+0xab/0xe0
? syscall_trace_enter.constprop.0+0x126/0x1a0
do_syscall_64+0x3b/0x90
entry_SYSCALL_64_after_hwframe+0x72/0xdc
</TASK>
The deadlock is easily reproducible with perftest. Fix it by disabling
softirq when acquiring the lock in process context.
Fixes: f605f26ea1 ("RDMA/rxe: Protect QP state with qp->state_lock")
Link: https://lore.kernel.org/r/20230418090642.1849358-1-matsuda-daisuke@fujitsu.com
Signed-off-by: Daisuke Matsuda <matsuda-daisuke@fujitsu.com>
Acked-by: Zhu Yanjun <zyjzyj2000@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2023-04-21 12:33:00 -03:00
..
2023-03-13 12:44:53 +01:00
2023-03-17 16:44:41 +01:00
2023-02-24 12:47:33 -08:00
2023-03-16 16:54:38 +09:00
2023-03-05 11:19:16 -08:00
2023-03-15 08:48:58 -06:00
2023-02-09 14:20:04 -08:00
2023-02-27 10:04:49 -08:00
2023-03-12 23:28:10 +02:00
2023-03-06 14:41:20 -08:00
2023-02-21 09:45:13 -08:00
2023-03-03 10:30:58 -08:00
2023-03-07 14:04:13 +01:00
2023-03-05 11:32:30 -08:00
2023-02-25 09:19:23 -08:00
2023-02-25 09:19:23 -08:00
2023-02-24 17:18:54 -08:00
2023-02-17 09:16:34 +01:00
2023-02-21 08:10:03 -08:00
2023-02-24 12:58:55 -08:00
2023-03-09 18:00:31 +01:00
2023-02-24 12:58:55 -08:00
2023-03-07 14:15:10 +01:00
2023-03-17 16:06:58 +10:00
2023-03-09 10:17:23 -08:00
2023-02-24 12:58:55 -08:00
2023-02-24 12:58:55 -08:00
2023-03-15 19:15:00 -07:00
2023-02-24 12:58:55 -08:00
2023-03-09 22:07:52 +01:00
2023-02-28 16:05:01 -08:00
2023-02-21 12:13:58 -08:00
2023-02-24 12:47:33 -08:00
2023-04-21 12:33:00 -03:00
2023-02-27 10:04:49 -08:00
2023-03-13 21:13:48 +02:00
2023-02-27 10:04:49 -08:00
2023-02-24 12:58:55 -08:00
2023-02-25 11:30:21 -08:00
2023-02-23 15:09:31 -08:00
2023-02-25 11:00:06 -08:00
2023-02-23 14:47:13 -06:00
2023-03-15 12:18:07 -06:00
2023-03-18 11:07:15 -07:00
2023-03-13 21:13:49 +02:00
2023-02-27 09:47:26 -08:00
2023-02-27 14:05:08 -08:00
2023-03-09 21:58:45 +01:00
2023-03-09 15:33:51 +01:00
2023-03-11 09:24:05 -08:00
2023-04-16 13:29:26 +03:00
2023-03-15 00:28:23 -07:00
2023-02-25 11:48:02 -08:00
2023-03-16 07:01:48 -06:00
2023-03-10 10:55:49 +01:00
2023-02-24 13:40:13 -08:00
2023-02-16 13:48:53 +01:00
2023-02-24 12:47:33 -08:00
2023-03-13 09:15:11 +01:00
2023-02-24 12:58:55 -08:00
2023-03-03 09:32:51 -08:00
2023-02-27 10:04:49 -08:00
2023-02-27 10:04:49 -08:00
2023-03-07 12:08:30 +01:00
2023-03-03 16:33:28 -08:00
2023-03-03 10:30:58 -08:00
2023-02-22 21:23:48 -08:00
2023-02-20 12:26:35 +01:00
2023-03-02 09:21:25 -08:00
2023-02-27 10:04:49 -08:00
2023-02-26 12:10:28 -08:00
2023-03-03 09:15:50 -08:00
2023-03-03 14:41:50 -08:00
2023-02-09 16:51:39 -08:00
2023-03-17 09:30:57 -07:00
2023-03-01 09:44:22 -08:00
2023-02-27 10:04:49 -08:00
2023-02-24 17:29:52 -08:00
2023-03-02 09:25:38 -08:00
2023-03-09 10:06:28 +01:00
2023-03-06 16:50:42 -05:00
2023-02-24 12:58:55 -08:00
2023-03-03 20:34:49 +01:00
2023-02-24 12:58:55 -08:00
2023-03-19 10:09:58 -07:00
2023-03-09 21:09:28 -05:00
2023-02-23 17:09:35 -08:00
2023-02-24 17:22:11 -08:00
2023-03-13 02:29:12 -04:00
2023-02-25 11:52:57 -08:00
2023-03-13 02:29:11 -04:00
2023-03-18 16:01:34 -07:00
2023-03-13 13:29:27 +01:00
2023-02-25 11:48:02 -08:00
2023-03-09 21:58:57 +01:00
2023-03-02 11:12:01 -08:00
2023-03-17 10:45:49 -07:00
2023-02-26 11:53:25 -08:00