aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@googlemail.com>2010-12-30 11:25:29 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-01-04 14:46:13 -0500
commit24a8fdad35835e8d71f7c4b978a246fafed2e7b4 (patch)
tree3ee2b5710b802dca6fe43cbedf461c54e0f2be93 /net/mac80211/ieee80211_i.h
parent1186488b4a4d4871e40cb1604ba3ede3d4b7cc90 (diff)
mac80211: serialize rx path workers
This patch addresses the issue of serialization between the main rx path and various reorder release timers. <http://www.spinics.net/lists/linux-wireless/msg57214.html> It converts the previously local "frames" queue into a global rx queue [rx_skb_queue]. This way, everyone (be it the main rx-path or some reorder release timeout) can add frames to it. Only one active rx handler worker [ieee80211_rx_handlers] is needed. All other threads which have lost the race of "runnning_rx_handler" can now simply "return", knowing that the thread who had the "edge" will also take care of their workload. Signed-off-by: Christian Lamparter <chunkeey@googlemail.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.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index a9eb67380da6..1bf2fc8b9bde 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -761,6 +761,15 @@ struct ieee80211_local {
761 struct sk_buff_head skb_queue; 761 struct sk_buff_head skb_queue;
762 struct sk_buff_head skb_queue_unreliable; 762 struct sk_buff_head skb_queue_unreliable;
763 763
764 /*
765 * Internal FIFO queue which is shared between multiple rx path
766 * stages. Its main task is to provide a serialization mechanism,
767 * so all rx handlers can enjoy having exclusive access to their
768 * private data structures.
769 */
770 struct sk_buff_head rx_skb_queue;
771 bool running_rx_handler; /* protected by rx_skb_queue.lock */
772
764 /* Station data */ 773 /* Station data */
765 /* 774 /*
766 * The mutex only protects the list and counter, 775 * The mutex only protects the list and counter,