Jeff Johnson <quic_jjohnson@xxxxxxxxxxx> writes: > On 8/29/2024 7:39 PM, Baochen Qiang wrote: > >> From: Wen Gong <quic_wgong@xxxxxxxxxxx> >> >> Running this test in a loop it is easy to reproduce an rtnl deadlock: >> >> iw reg set FI >> ifconfig wlan0 down >> >> What happens is that thread A (workqueue) tries to update the regulatory: >> >> try to acquire the rtnl_lock of ar->regd_update_work >> >> rtnl_lock >> ath12k_regd_update [ath12k] >> ath12k_regd_update_work [ath12k] >> process_one_work >> worker_thread >> kthread >> ret_from_fork >> >> And thread B (ifconfig) tries to stop the interface: >> >> try to cancel_work_sync(&ar->regd_update_work) in ath12k_mac_op_stop(). >> ifconfig 3109 [003] 2414.232506: probe: >> >> ath12k_mac_op_stop [ath12k] >> drv_stop [mac80211] >> ieee80211_do_stop [mac80211] >> ieee80211_stop [mac80211] >> >> The sequence of deadlock is: >> >> 1. Thread B calls rtnl_lock(). >> >> 2. Thread A starts to run and calls rtnl_lock() from within >> ath12k_regd_update_work(), then enters wait state because the lock is owned by > > checkpatch complains that the commit description exceeds 75 columns > > at a minimum you should avoid exceeding 80 columns > > Kalle, do you want to reformat when you pull into pending? Yes, I can reformat it in the pending branch. But I'm busy right now so it might take a while. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches