Re: [PATCH 15/16] mac80211: agg-tx: don't schedule_and_wake_txq() under sta->lock
From: Johannes Berg <johannes@sipsolutions.net>
Date: 2021-11-30 11:52:19
On Tue, 2021-11-30 at 12:32 +0100, Toke Høiland-Jørgensen wrote:
Luca Coelho [off-list ref] writes:quoted
On Mon, 2021-11-29 at 14:54 +0100, Toke Høiland-Jørgensen wrote:quoted
Luca Coelho [off-list ref] writes:quoted
From: Johannes Berg <redacted> When we call ieee80211_agg_start_txq(), that will in turn call schedule_and_wake_txq(). Called from ieee80211_stop_tx_ba_cb() this is done under sta->lock, which leads to certain circular lock dependencies, as reported by Chris Murphy: https://lore.kernel.org/r/CAJCQCtSXJ5qA4bqSPY=oLRMbv-irihVvP7A2uGutEbXQVkoNaw@mail.gmail.com (local) In general, ieee80211_agg_start_txq() is usually not called with sta->lock held, only in this one place. But it's always called with sta->ampdu_mlme.mtx held, and that's therefore clearly sufficient. Change ieee80211_stop_tx_ba_cb() to also call it without the sta->lock held, by factoring it out of ieee80211_remove_tid_tx() (which is only called in this one place). This breaks the locking chain and makes it less likely that we'll have similar locking chain problems in the future. Reported-by: Chris Murphy <redacted> Signed-off-by: Johannes Berg <redacted> Signed-off-by: Luca Coelho <redacted>Does this need a fixes: tag?Hi Toke, Neither Johannes nor Chris pointed to any specific patch that this commit is fixing. If you know the exact commit that broke this, I can add the tag and send v2.Well, it looks like the code you're changing comes all the way back from: ba8c3d6f16a1 ("mac80211: add an intermediate software queue implementation") Maybe Johannes can comment on whether it's appropriate to include this, or if the code changed too much in the meantime...
I think that probably makes sense, and I guess I can include that tag when I apply it. I suspect the reason I didn't do it internally (we have a different tag though, so that's no excuse) is that there we didn't care until iwlwifi actually gained TXQ support. johannes