wifi: mt76: sdio: fix the deadlock caused by sdio->stat_work
authorSean Wang <sean.wang@mediatek.com>
Thu, 21 Jul 2022 22:39:35 +0000 (06:39 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 15 Sep 2022 10:53:58 +0000 (12:53 +0200)
commite5d78fd998be94fb459a3d625df7367849b997b8
tree8eeb51fbab83c298c127a387423ff9cc133fae5c
parent0af1ad955919a7a289a15e844d980bcaeda7d7a6
wifi: mt76: sdio: fix the deadlock caused by sdio->stat_work

Because wake_work and sdio->stat_work share the same workqueue mt76->wq,
if sdio->stat_work cannot acquire the mutex lock such as that was possibly
held up by [mt7615, mt7921]_mutex_acquire. Additionally, if
[mt7615, mt7921]_mutex_acquire was called by sdio->stat_work self, the wake
would be blocked by itself. Thus, we move the stat_work into
ieee80211_workqueue instead to break the deadlock.

Fixes: d39b52e31aa6 ("mt76: introduce mt76_sdio module")
Co-developed-by: YN Chen <YN.Chen@mediatek.com>
Signed-off-by: YN Chen <YN.Chen@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/sdio.c