mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-10-12 06:01:58 +00:00
the nvme_handle_cqe() interrupt handler calls nvme_complete_async_event()
but the latter may call nvme_auth_stop() which is a blocking function.
Sleeping functions can't be called in interrupt context
BUG: sleeping function called from invalid context
in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/15
Call Trace:
<IRQ>
__cancel_work_timer+0x31e/0x460
? nvme_change_ctrl_state+0xcf/0x3c0 [nvme_core]
? nvme_change_ctrl_state+0xcf/0x3c0 [nvme_core]
nvme_complete_async_event+0x365/0x480 [nvme_core]
nvme_poll_cq+0x262/0xe50 [nvme]
Fix the bug by moving nvme_auth_stop() to fw_act_work
(executed by the nvme_wq workqueue)
Fixes:
|
History
|
|
|---|---|---|
| .. | ||
| apple.c | ||
| auth.c | ||
| constants.c | ||
| core.c | ||
| fabrics.c | ||
| fabrics.h | ||
| fault_inject.c | ||
| fc.c | ||
| fc.h | ||
| hwmon.c | ||
| ioctl.c | ||
| Kconfig | ||
| Makefile | ||
| multipath.c | ||
| nvme.h | ||
| pci.c | ||
| pr.c | ||
| rdma.c | ||
| sysfs.c | ||
| tcp.c | ||
| trace.c | ||
| trace.h | ||
| zns.c | ||