diff options
author | Christian Lamparter <chunkeey@googlemail.com> | 2010-12-30 11:25:29 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-01-04 14:46:13 -0500 |
commit | 24a8fdad35835e8d71f7c4b978a246fafed2e7b4 (patch) | |
tree | 3ee2b5710b802dca6fe43cbedf461c54e0f2be93 /net/mac80211/ieee80211_i.h | |
parent | 1186488b4a4d4871e40cb1604ba3ede3d4b7cc90 (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.h | 9 |
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, |