Skip to content

Commit 1afac08

Browse files
DeanLuickrleon
authored andcommitted
IB/hfi1: Correctly move list in sc_disable()
Commit 13bac86 ("IB/hfi1: Fix abba locking issue with sc_disable()") incorrectly tries to move a list from one list head to another. The result is a kernel crash. The crash is triggered when a link goes down and there are waiters for a send to complete. The following signature is seen: BUG: kernel NULL pointer dereference, address: 0000000000000030 [...] Call Trace: sc_disable+0x1ba/0x240 [hfi1] pio_freeze+0x3d/0x60 [hfi1] handle_freeze+0x27/0x1b0 [hfi1] process_one_work+0x1b0/0x380 ? process_one_work+0x380/0x380 worker_thread+0x30/0x360 ? process_one_work+0x380/0x380 kthread+0xd7/0x100 ? kthread_complete_and_exit+0x20/0x20 ret_from_fork+0x1f/0x30 The fix is to use the correct call to move the list. Fixes: 13bac86 ("IB/hfi1: Fix abba locking issue with sc_disable()") Signed-off-by: Dean Luick <[email protected]> Signed-off-by: Dennis Dalessandro <[email protected]> Link: https://lore.kernel.org/r/166610327042.674422.6146908799669288976.stgit@awfm-02.cornelisnetworks.com Signed-off-by: Leon Romanovsky <[email protected]>
1 parent eb83f50 commit 1afac08

File tree

1 file changed

+1
-2
lines changed
  • drivers/infiniband/hw/hfi1

1 file changed

+1
-2
lines changed

drivers/infiniband/hw/hfi1/pio.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -913,8 +913,7 @@ void sc_disable(struct send_context *sc)
913913
spin_unlock(&sc->release_lock);
914914

915915
write_seqlock(&sc->waitlock);
916-
if (!list_empty(&sc->piowait))
917-
list_move(&sc->piowait, &wake_list);
916+
list_splice_init(&sc->piowait, &wake_list);
918917
write_sequnlock(&sc->waitlock);
919918
while (!list_empty(&wake_list)) {
920919
struct iowait *wait;

0 commit comments

Comments
 (0)