mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-30 15:51:14 +00:00
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:
|
||
|---|---|---|
| .. | ||
| 3com | ||
| 8390 | ||
| adaptec | ||
| aeroflex | ||
| agere | ||
| alacritech | ||
| allwinner | ||
| alteon | ||
| altera | ||
| amazon | ||
| amd | ||
| apm | ||
| apple | ||
| aquantia | ||
| arc | ||
| atheros | ||
| aurora | ||
| broadcom | ||
| brocade | ||
| cadence | ||
| calxeda | ||
| cavium | ||
| chelsio | ||
| cirrus | ||
| cisco | ||
| cortina | ||
| davicom | ||
| dec | ||
| dlink | ||
| emulex | ||
| ezchip | ||
| faraday | ||
| freescale | ||
| fujitsu | ||
| hisilicon | ||
| hp | ||
| huawei | ||
| i825xx | ||
| ibm | ||
| intel | ||
| marvell | ||
| mediatek | ||
| mellanox | ||
| micrel | ||
| microchip | ||
| moxa | ||
| myricom | ||
| natsemi | ||
| neterion | ||
| netronome | ||
| ni | ||
| nuvoton | ||
| nvidia | ||
| nxp | ||
| oki-semi | ||
| packetengines | ||
| pasemi | ||
| qlogic | ||
| qualcomm | ||
| rdc | ||
| realtek | ||
| renesas | ||
| rocker | ||
| samsung | ||
| seeq | ||
| sfc | ||
| sgi | ||
| silan | ||
| sis | ||
| smsc | ||
| socionext | ||
| stmicro | ||
| sun | ||
| synopsys | ||
| tehuti | ||
| ti | ||
| toshiba | ||
| tundra | ||
| via | ||
| wiznet | ||
| xilinx | ||
| xircom | ||
| xscale | ||
| dnet.c | ||
| dnet.h | ||
| ec_bhf.c | ||
| ethoc.c | ||
| fealnx.c | ||
| jme.c | ||
| jme.h | ||
| Kconfig | ||
| korina.c | ||
| lantiq_etop.c | ||
| Makefile | ||
| netx-eth.c | ||