mac80211: TDLS: handle chan-switch in RTNL locked work
Move TDLS channel-switch Rx handling into an RTNL locked work. This is required to add proper regulatory checking to incoming channel-switch requests. Queue incoming requests in a dedicated skb queue and handle the request in a device-specific work to avoid deadlocking on interface removal. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Цей коміт міститься в:

зафіксовано
Johannes Berg

джерело
72bbe3d1c2
коміт
c8ff71e667
@@ -1008,7 +1008,6 @@ enum sdata_queue_type {
|
||||
IEEE80211_SDATA_QUEUE_AGG_STOP = 2,
|
||||
IEEE80211_SDATA_QUEUE_RX_AGG_START = 3,
|
||||
IEEE80211_SDATA_QUEUE_RX_AGG_STOP = 4,
|
||||
IEEE80211_SDATA_QUEUE_TDLS_CHSW = 5,
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -1351,6 +1350,10 @@ struct ieee80211_local {
|
||||
|
||||
/* extended capabilities provided by mac80211 */
|
||||
u8 ext_capa[8];
|
||||
|
||||
/* TDLS channel switch */
|
||||
struct work_struct tdls_chsw_work;
|
||||
struct sk_buff_head skb_queue_tdls_chsw;
|
||||
};
|
||||
|
||||
static inline struct ieee80211_sub_if_data *
|
||||
@@ -2054,9 +2057,8 @@ int ieee80211_tdls_channel_switch(struct wiphy *wiphy, struct net_device *dev,
|
||||
void ieee80211_tdls_cancel_channel_switch(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
const u8 *addr);
|
||||
void ieee80211_process_tdls_channel_switch(struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb);
|
||||
void ieee80211_teardown_tdls_peers(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_tdls_chsw_work(struct work_struct *wk);
|
||||
|
||||
extern const struct ethtool_ops ieee80211_ethtool_ops;
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача