smartpqi: panic: malloc(M_WAITOK) with sleeping prohibited

From: Yuri <yuri_at_aetern.org>
Date: Mon, 31 Jan 2022 20:13:31 UTC
Got this panic after booting GENERIC kernel:

panic: malloc(M_WAITOK) with sleeping prohibited
cpuid = 3
time = 1643658859
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame
0xfffffe00c7b20ae0
vpanic() at vpanic+0x17f/frame 0xfffffe00c7b20b30
panic() at panic+0x43/frame 0xfffffe00c7b20b90
malloc_dbg() at malloc_dbg+0xd4/frame 0xfffffe00c7b20bb0
malloc_domainset() at malloc_domainset+0x36/frame 0xfffffe00c7b20c20
bounce_bus_dmamem_alloc() at bounce_bus_dmamem_alloc+0x5b/frame
0xfffffe00c7b20c50
os_dma_mem_alloc() at os_dma_mem_alloc+0xe3/frame 0xfffffe00c7b20c90
pqisrc_build_send_raid_request() at
pqisrc_build_send_raid_request+0x78/frame 0xfffffe00c7b20d30
pqisrc_write_current_time_to_host_wellness() at
pqisrc_write_current_time_to_host_wellness+0xff/frame
0xfffffe00c7b20df0os_wellness_periodic() at
os_wellness_periodic+0x1a/frame 0xfffffe00c7b20e10
softclock_call_cc() at softclock_call_cc+0x14d/frame 0xfffffe00c7b20ec0
softclock_thread() at softclock_thread+0xc6/frame 0xfffffe00c7b20ef0
fork_exit() at fork_exit+0x80/frame 0xfffffe00c7b20f30
fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00c7b20f30

The reason seems to be obvious enough, changing BUS_DMA_WAITOK to
BUS_DMA_NOWAIT in os_dma_mem_alloc() helps.