* [PATCH v3 1/2] wifi: rtw88: clear RTW_FLAG_RESTARTING in rtw_ops_stop() [not found] <20261108085126.331784-1-skalpesh942@gmail.com> @ 2026-11-08 8:51 ` Kalpesh Solanki 2026-11-08 11:40 ` Luka Gejak 0 siblings, 1 reply; 2+ messages in thread From: Kalpesh Solanki @ 2026-11-08 8:51 UTC (permalink / raw) To: pkshih Cc: luka.gejak, kvalo, linux-wireless, linux-kernel, Kalpesh Solanki, stable When mac80211 stops or suspends the device without WoWLAN, drv_reconfig_complete() is never invoked with IEEE80211_RECONFIG_TYPE_RESTART. If firmware recovery was queued or running during this transition, RTW_FLAG_RESTARTING remains set permanently, preventing all subsequent firmware recoveries until the driver is reloaded. Clear RTW_FLAG_RESTARTING in rtw_ops_stop() so that the driver always starts with a clean recovery state when the interface is brought back up. Fixes: 5c831644e1f4 ("rtw88: handle and recover when firmware crash") Cc: stable@vger.kernel.org Signed-off-by: Kalpesh Solanki <skalpesh942@gmail.com> --- v3: - New patch in v3 addressing the pre-existing RTW_FLAG_RESTARTING gap. drivers/net/wireless/realtek/rtw88/mac80211.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 5e40cf06a9e..7c86da9e939 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -67,6 +67,7 @@ static void rtw_ops_stop(struct ieee80211_hw *hw, bool suspend) struct rtw_dev *rtwdev = hw->priv; mutex_lock(&rtwdev->mutex); + clear_bit(RTW_FLAG_RESTARTING, rtwdev->flags); rtw_core_stop(rtwdev); mutex_unlock(&rtwdev->mutex); } -- 2.53.0 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v3 1/2] wifi: rtw88: clear RTW_FLAG_RESTARTING in rtw_ops_stop() 2026-11-08 8:51 ` [PATCH v3 1/2] wifi: rtw88: clear RTW_FLAG_RESTARTING in rtw_ops_stop() Kalpesh Solanki @ 2026-11-08 11:40 ` Luka Gejak 0 siblings, 0 replies; 2+ messages in thread From: Luka Gejak @ 2026-11-08 11:40 UTC (permalink / raw) To: Kalpesh Solanki, pkshih Cc: kvalo, linux-wireless, linux-kernel, Kalpesh Solanki, stable Hi Kalpesh, Thanks for the new version. One comment below. November 8, 2026 at 9:51 AM, "Kalpesh Solanki" <skalpesh942@gmail.com> wrote: > diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c > index 5e40cf06a9e3..7c86da9e9396 100644 > --- a/drivers/net/wireless/realtek/rtw88/mac80211.c > +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c > @@ -67,6 +67,7 @@ static void rtw_ops_stop(struct ieee80211_hw *hw, bool suspend) > struct rtw_dev *rtwdev = hw->priv; > > mutex_lock(&rtwdev->mutex); > + clear_bit(RTW_FLAG_RESTARTING, rtwdev->flags); > rtw_core_stop(rtwdev); > mutex_unlock(&rtwdev->mutex); > } As far as I can see one case still doesn't get here, and I missed it when I suggested rtw_ops_stop(). If the restart fails in drv_start(), local->started is false by the time cfg80211_shutdown_all_interfaces() closes the interfaces, so drv_stop() returns early: if (WARN_ON(!local->started)) return; So the flag stays set after a failed restart, which seems a likely way for a recovery to end on hardware that is really stuck. The next time the interface comes up, recovery would stay blocked until it is stopped again. Maybe rtw_ops_start() could clear it as well when rtw_core_start() fails? Best regards, Luka Gejak ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-11-08 11:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20261108085126.331784-1-skalpesh942@gmail.com>
2026-11-08 8:51 ` [PATCH v3 1/2] wifi: rtw88: clear RTW_FLAG_RESTARTING in rtw_ops_stop() Kalpesh Solanki
2026-11-08 11:40 ` Luka Gejak
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox