• Jack Morgenstein's avatar
    net/mlx4: Fix irq-unsafe spinlock usage · 43153f09
    Jack Morgenstein authored
    [ Upstream commit d546b67c ]
    
    spin_lock/unlock was used instead of spin_un/lock_irq
    in a procedure used in process space, on a spinlock
    which can be grabbed in an interrupt.
    
    This caused the stack trace below to be displayed (on kernel
    4.17.0-rc1 compiled with Lock Debugging enabled):
    
    [  154.661474] WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
    [  154.668909] 4.17.0-rc1-rdma_rc_mlx+ #3 Tainted: G          I
    [  154.675856] -----------------------------------------------------
    [  154.682706] modprobe/10159 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
    [  154.690254] 00000000f3b0e495 (&(&qp_table->lock)->rlock){+.+.}, at: mlx4_qp_remove+0x20/0x50 [mlx4_core]
    [  154.700927]
    and this task is already holding:
    [  154.707461] 0000000094373b5d (&(&cq->lock)->rlock/1){....}, at: destroy_qp_common+0x111/0x560 [mlx4_ib]
    [  154.718028] which would create a new lock dependency:
    [  154.723705]  (&(&cq->lock)->rlock/1){....} -> (&(&qp_table->lock)->rlock){+.+.}
    [  154.731922]
    but this new dependency connects a SOFTIRQ-irq-safe lock:
    [  154.740798]  (&(&cq->lock)->rlock){..-.}
    [  154.740800]
    ... which became SOFTIRQ-irq-safe at:
    [  154.752163]   _raw_spin_lock_irqsave+0x3e/0x50
    [  154.757163]   mlx4_ib_poll_cq+0x36/0x900 [mlx4_ib]
    [  154.762554]   ipoib_tx_poll+0x4a/0xf0 [ib_ipoib]
    ...
    to a SOFTIRQ-irq-unsafe lock:
    [  154.815603]  (&(&qp_table->lock)->rlock){+.+.}
    [  154.815604]
    ... which became SOFTIRQ-irq-unsafe at:
    [  154.827718] ...
    [  154.827720]   _raw_spin_lock+0x35/0x50
    [  154.833912]   mlx4_qp_lookup+0x1e/0x50 [mlx4_core]
    [  154.839302]   mlx4_flow_attach+0x3f/0x3d0 [mlx4_core]
    
    Since mlx4_qp_lookup() is called only in process space, we can
    simply replace the spin_un/lock calls with spin_un/lock_irq calls.
    
    Fixes: 6dc06c08 ("net/mlx4: Fix the check in attaching steering rules")
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    43153f09
qp.c 26.6 KB