aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ibss.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-06-10 04:21:31 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-14 15:38:17 -0400
commit64592c8fc0e99d445fc3fdedddeb6088e20086f1 (patch)
tree2493358821abc4050b25f8a0bd813b763b188d38 /net/mac80211/ibss.c
parent35f20c14a103ca2c7062999e934a513b83d84de6 (diff)
mac80211: use common work struct
IBSS, managed and mesh modes all have their own work struct, and in the future we want to also use it in other modes to process frames from the now common skb queue. This also makes the skb queue and work safe to use from other interface types. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ibss.c')
-rw-r--r--net/mac80211/ibss.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index a9ff904620db..18c4266cca1f 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -761,7 +761,7 @@ static void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
761static void ieee80211_ibss_work(struct work_struct *work) 761static void ieee80211_ibss_work(struct work_struct *work)
762{ 762{
763 struct ieee80211_sub_if_data *sdata = 763 struct ieee80211_sub_if_data *sdata =
764 container_of(work, struct ieee80211_sub_if_data, u.ibss.work); 764 container_of(work, struct ieee80211_sub_if_data, work);
765 struct ieee80211_local *local = sdata->local; 765 struct ieee80211_local *local = sdata->local;
766 struct ieee80211_if_ibss *ifibss; 766 struct ieee80211_if_ibss *ifibss;
767 struct sk_buff *skb; 767 struct sk_buff *skb;
@@ -804,7 +804,7 @@ static void ieee80211_queue_ibss_work(struct ieee80211_sub_if_data *sdata)
804 struct ieee80211_local *local = sdata->local; 804 struct ieee80211_local *local = sdata->local;
805 805
806 set_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request); 806 set_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request);
807 ieee80211_queue_work(&local->hw, &ifibss->work); 807 ieee80211_queue_work(&local->hw, &sdata->work);
808} 808}
809 809
810static void ieee80211_ibss_timer(unsigned long data) 810static void ieee80211_ibss_timer(unsigned long data)
@@ -827,7 +827,6 @@ void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata)
827{ 827{
828 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; 828 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
829 829
830 cancel_work_sync(&ifibss->work);
831 if (del_timer_sync(&ifibss->timer)) 830 if (del_timer_sync(&ifibss->timer))
832 ifibss->timer_running = true; 831 ifibss->timer_running = true;
833} 832}
@@ -847,7 +846,7 @@ void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
847{ 846{
848 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; 847 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
849 848
850 INIT_WORK(&ifibss->work, ieee80211_ibss_work); 849 INIT_WORK(&sdata->work, ieee80211_ibss_work);
851 setup_timer(&ifibss->timer, ieee80211_ibss_timer, 850 setup_timer(&ifibss->timer, ieee80211_ibss_timer,
852 (unsigned long) sdata); 851 (unsigned long) sdata);
853} 852}
@@ -890,7 +889,7 @@ ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
890 case IEEE80211_STYPE_PROBE_REQ: 889 case IEEE80211_STYPE_PROBE_REQ:
891 case IEEE80211_STYPE_AUTH: 890 case IEEE80211_STYPE_AUTH:
892 skb_queue_tail(&sdata->skb_queue, skb); 891 skb_queue_tail(&sdata->skb_queue, skb);
893 ieee80211_queue_work(&local->hw, &sdata->u.ibss.work); 892 ieee80211_queue_work(&local->hw, &sdata->work);
894 return RX_QUEUED; 893 return RX_QUEUED;
895 } 894 }
896 895
@@ -956,7 +955,7 @@ int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
956 ieee80211_recalc_idle(sdata->local); 955 ieee80211_recalc_idle(sdata->local);
957 956
958 set_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request); 957 set_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
959 ieee80211_queue_work(&sdata->local->hw, &sdata->u.ibss.work); 958 ieee80211_queue_work(&sdata->local->hw, &sdata->work);
960 959
961 return 0; 960 return 0;
962} 961}
@@ -967,7 +966,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
967 966
968 del_timer_sync(&sdata->u.ibss.timer); 967 del_timer_sync(&sdata->u.ibss.timer);
969 clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request); 968 clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
970 cancel_work_sync(&sdata->u.ibss.work); 969 cancel_work_sync(&sdata->work);
971 clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request); 970 clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
972 971
973 sta_info_flush(sdata->local, sdata); 972 sta_info_flush(sdata->local, sdata);