123456789101112131415161718192021222324252627282930313233 |
- From: Felix Fietkau <[email protected]>
- Date: Fri, 1 Mar 2019 14:42:56 +0100
- Subject: [PATCH] mac80211: do not call driver wake_tx_queue op during reconfig
- There are several scenarios in which mac80211 can call drv_wake_tx_queue
- after ieee80211_restart_hw has been called and has not yet completed.
- Driver private structs are considered uninitialized until mac80211 has
- uploaded the vifs, stations and keys again, so using private tx queue
- data during that time is not safe.
- The driver can also not rely on drv_reconfig_complete to figure out when
- it is safe to accept drv_wake_tx_queue calls again, because it is only
- called after all tx queues are woken again.
- To fix this, bail out early in drv_wake_tx_queue if local->in_reconfig
- is set.
- Cc: [email protected]
- Signed-off-by: Felix Fietkau <[email protected]>
- ---
- --- a/net/mac80211/driver-ops.h
- +++ b/net/mac80211/driver-ops.h
- @@ -1166,6 +1166,9 @@ static inline void drv_wake_tx_queue(str
- {
- struct ieee80211_sub_if_data *sdata = vif_to_sdata(txq->txq.vif);
-
- + if (local->in_reconfig)
- + return;
- +
- if (!check_sdata_in_driver(sdata))
- return;
-
|