diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-06-10 04:21:31 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-14 15:38:17 -0400 |
commit | 64592c8fc0e99d445fc3fdedddeb6088e20086f1 (patch) | |
tree | 2493358821abc4050b25f8a0bd813b763b188d38 /net/mac80211/ibss.c | |
parent | 35f20c14a103ca2c7062999e934a513b83d84de6 (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.c | 13 |
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, | |||
761 | static void ieee80211_ibss_work(struct work_struct *work) | 761 | static 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 | ||
810 | static void ieee80211_ibss_timer(unsigned long data) | 810 | static 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); |