Page MenuHomeFreeBSD

LinuxKPI: exapnd dma_sync_single_for_cpu() in lkpi_dma_unmap()
Needs ReviewPublic

Authored by bz on Fri, Jan 23, 7:21 PM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Jan 27, 1:24 AM
Unknown Object (File)
Mon, Jan 26, 2:20 AM
Unknown Object (File)
Sat, Jan 24, 9:23 PM
Unknown Object (File)
Sat, Jan 24, 9:16 PM
Unknown Object (File)
Sat, Jan 24, 8:37 PM
Unknown Object (File)
Sat, Jan 24, 3:11 PM
Unknown Object (File)
Sat, Jan 24, 1:48 PM
Unknown Object (File)
Sat, Jan 24, 11:30 AM
Subscribers

Details

Reviewers
None
Group Reviewers
linuxkpi
Summary

In case lkpi_dma_unmap() would call dma_sync_single_for_cpu() we get
into a lock recursion which will trigger a panic with debug kernels.

It would be hard to provide an internal "locked" version for
dma_sync_single_for_cpu(). In the old days this would not have
been a problem but (long before we added the missing sync calls)
some locks got folded into one in a6619e8d9c1a3.

Sponsored by: The FreeBSD Foundation
MFC after: 3 days
Observed with: iwlwifi mld

Test Plan
panic: _mtx_lock_sleep: recursed on non-recursive mutex lkpi-priv-dma @ /sys/compat/linuxkpi/common/src/linux_pci.c:1835

cpuid = 15
time = 1769190994
KDB: stack backtrace:
db_trace_self() at db_trace_self
db_trace_self_wrapper() at db_trace_self_wrapper+0x38
vpanic() at vpanic+0x1a0
panic() at panic+0x48
__mtx_lock_sleep() at __mtx_lock_sleep+0x428
__mtx_lock_flags() at __mtx_lock_flags+0x130
lkpi_dma_unmap() at lkpi_dma_unmap+0x18c
iwl_pcie_free_rbs_pool() at iwl_pcie_free_rbs_pool+0x6c
iwl_pcie_gen1_2_op_mode_enter() at iwl_pcie_gen1_2_op_mode_enter+0x14
iwl_op_mode_mvm_start() at iwl_op_mode_mvm_start+0x83c
iwl_opmode_register() at iwl_opmode_register+0x1a8
iwl_mvm_init() at iwl_mvm_init+0x44
linker_load_module() at linker_load_module+0xb20
kern_kldload() at kern_kldload+0x18c
sys_kldload() at sys_kldload+0x6c
do_el0_sync() at do_el0_sync+0x68c
handle_el0_sync() at handle_el0_sync+0x4c

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 70079
Build 66962: arc lint + arc unit