diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-03-23 12:28:37 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:13:21 -0400 |
commit | 2a577d98712a284a612dd51d69db5cb989810dc2 (patch) | |
tree | c2e667d92d280d404dd964548aefedd43996645c /net/mac80211/ieee80211_i.h | |
parent | f0e72851f7ad108fed20426b46a18ab5fcd5729f (diff) |
mac80211: rework the pending packets code
The pending packets code is quite incomprehensible, uses memory barriers
nobody really understands, etc. This patch reworks it entirely, using
the queue spinlock, proper stop bits and the skb queues themselves to
indicate whether packets are pending or not (rather than a separate
variable like before).
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 785f6363a6fc..6ce62e553dc2 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -184,10 +184,6 @@ struct ieee80211_rx_data { | |||
184 | u16 tkip_iv16; | 184 | u16 tkip_iv16; |
185 | }; | 185 | }; |
186 | 186 | ||
187 | struct ieee80211_tx_stored_packet { | ||
188 | struct sk_buff *skb; | ||
189 | }; | ||
190 | |||
191 | struct beacon_data { | 187 | struct beacon_data { |
192 | u8 *head, *tail; | 188 | u8 *head, *tail; |
193 | int head_len, tail_len; | 189 | int head_len, tail_len; |
@@ -583,6 +579,7 @@ enum queue_stop_reason { | |||
583 | IEEE80211_QUEUE_STOP_REASON_CSA, | 579 | IEEE80211_QUEUE_STOP_REASON_CSA, |
584 | IEEE80211_QUEUE_STOP_REASON_AGGREGATION, | 580 | IEEE80211_QUEUE_STOP_REASON_AGGREGATION, |
585 | IEEE80211_QUEUE_STOP_REASON_SUSPEND, | 581 | IEEE80211_QUEUE_STOP_REASON_SUSPEND, |
582 | IEEE80211_QUEUE_STOP_REASON_PENDING, | ||
586 | }; | 583 | }; |
587 | 584 | ||
588 | struct ieee80211_master_priv { | 585 | struct ieee80211_master_priv { |
@@ -639,9 +636,7 @@ struct ieee80211_local { | |||
639 | struct sta_info *sta_hash[STA_HASH_SIZE]; | 636 | struct sta_info *sta_hash[STA_HASH_SIZE]; |
640 | struct timer_list sta_cleanup; | 637 | struct timer_list sta_cleanup; |
641 | 638 | ||
642 | unsigned long queues_pending[BITS_TO_LONGS(IEEE80211_MAX_QUEUES)]; | 639 | struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; |
643 | unsigned long queues_pending_run[BITS_TO_LONGS(IEEE80211_MAX_QUEUES)]; | ||
644 | struct ieee80211_tx_stored_packet pending_packet[IEEE80211_MAX_QUEUES]; | ||
645 | struct tasklet_struct tx_pending_tasklet; | 640 | struct tasklet_struct tx_pending_tasklet; |
646 | 641 | ||
647 | /* number of interfaces with corresponding IFF_ flags */ | 642 | /* number of interfaces with corresponding IFF_ flags */ |