Commit 777b2600 authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: move TDLS work to wiphy work

Again, to have the wiphy locked for it.
Reviewed-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent eadfb547
...@@ -536,7 +536,7 @@ struct ieee80211_if_managed { ...@@ -536,7 +536,7 @@ struct ieee80211_if_managed {
/* TDLS support */ /* TDLS support */
u8 tdls_peer[ETH_ALEN] __aligned(2); u8 tdls_peer[ETH_ALEN] __aligned(2);
struct delayed_work tdls_peer_del_work; struct wiphy_delayed_work tdls_peer_del_work;
struct sk_buff *orig_teardown_skb; /* The original teardown skb */ struct sk_buff *orig_teardown_skb; /* The original teardown skb */
struct sk_buff *teardown_skb; /* A copy to send through the AP */ struct sk_buff *teardown_skb; /* A copy to send through the AP */
spinlock_t teardown_lock; /* To lock changing teardown_skb */ spinlock_t teardown_lock; /* To lock changing teardown_skb */
...@@ -2597,7 +2597,7 @@ int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev, ...@@ -2597,7 +2597,7 @@ int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
const u8 *extra_ies, size_t extra_ies_len); const u8 *extra_ies, size_t extra_ies_len);
int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev, int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
const u8 *peer, enum nl80211_tdls_operation oper); const u8 *peer, enum nl80211_tdls_operation oper);
void ieee80211_tdls_peer_del_work(struct work_struct *wk); void ieee80211_tdls_peer_del_work(struct wiphy *wiphy, struct wiphy_work *wk);
int ieee80211_tdls_channel_switch(struct wiphy *wiphy, struct net_device *dev, int ieee80211_tdls_channel_switch(struct wiphy *wiphy, struct net_device *dev,
const u8 *addr, u8 oper_class, const u8 *addr, u8 oper_class,
struct cfg80211_chan_def *chandef); struct cfg80211_chan_def *chandef);
......
...@@ -6830,8 +6830,8 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata) ...@@ -6830,8 +6830,8 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
ieee80211_beacon_connection_loss_work); ieee80211_beacon_connection_loss_work);
wiphy_work_init(&ifmgd->csa_connection_drop_work, wiphy_work_init(&ifmgd->csa_connection_drop_work,
ieee80211_csa_connection_drop_work); ieee80211_csa_connection_drop_work);
INIT_DELAYED_WORK(&ifmgd->tdls_peer_del_work, wiphy_delayed_work_init(&ifmgd->tdls_peer_del_work,
ieee80211_tdls_peer_del_work); ieee80211_tdls_peer_del_work);
wiphy_delayed_work_init(&ifmgd->ml_reconf_work, wiphy_delayed_work_init(&ifmgd->ml_reconf_work,
ieee80211_ml_reconf_work); ieee80211_ml_reconf_work);
timer_setup(&ifmgd->timer, ieee80211_sta_timer, 0); timer_setup(&ifmgd->timer, ieee80211_sta_timer, 0);
...@@ -7860,7 +7860,8 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata) ...@@ -7860,7 +7860,8 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata)
&ifmgd->beacon_connection_loss_work); &ifmgd->beacon_connection_loss_work);
wiphy_work_cancel(sdata->local->hw.wiphy, wiphy_work_cancel(sdata->local->hw.wiphy,
&ifmgd->csa_connection_drop_work); &ifmgd->csa_connection_drop_work);
cancel_delayed_work_sync(&ifmgd->tdls_peer_del_work); wiphy_delayed_work_cancel(sdata->local->hw.wiphy,
&ifmgd->tdls_peer_del_work);
wiphy_delayed_work_cancel(sdata->local->hw.wiphy, wiphy_delayed_work_cancel(sdata->local->hw.wiphy,
&ifmgd->ml_reconf_work); &ifmgd->ml_reconf_work);
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
/* give usermode some time for retries in setting up the TDLS session */ /* give usermode some time for retries in setting up the TDLS session */
#define TDLS_PEER_SETUP_TIMEOUT (15 * HZ) #define TDLS_PEER_SETUP_TIMEOUT (15 * HZ)
void ieee80211_tdls_peer_del_work(struct work_struct *wk) void ieee80211_tdls_peer_del_work(struct wiphy *wiphy, struct wiphy_work *wk)
{ {
struct ieee80211_sub_if_data *sdata; struct ieee80211_sub_if_data *sdata;
struct ieee80211_local *local; struct ieee80211_local *local;
...@@ -1224,9 +1224,9 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev, ...@@ -1224,9 +1224,9 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
return ret; return ret;
} }
ieee80211_queue_delayed_work(&sdata->local->hw, wiphy_delayed_work_queue(sdata->local->hw.wiphy,
&sdata->u.mgd.tdls_peer_del_work, &sdata->u.mgd.tdls_peer_del_work,
TDLS_PEER_SETUP_TIMEOUT); TDLS_PEER_SETUP_TIMEOUT);
return 0; return 0;
out_unlock: out_unlock:
...@@ -1526,7 +1526,8 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev, ...@@ -1526,7 +1526,8 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
} }
if (ret == 0 && ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) { if (ret == 0 && ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) {
cancel_delayed_work(&sdata->u.mgd.tdls_peer_del_work); wiphy_delayed_work_cancel(sdata->local->hw.wiphy,
&sdata->u.mgd.tdls_peer_del_work);
eth_zero_addr(sdata->u.mgd.tdls_peer); eth_zero_addr(sdata->u.mgd.tdls_peer);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment