Search Linux Wireless

[RFC] mac80211: Fix possible race between sta_unblock and network softirq

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx>
---

I'm currently writing some code for rt2800 that requires the driver
to stop sending to a specific station for a short period of time
(until all AMPDUs are finished to work around a hw issue that affects
rate sampling with minstrel_ht). I decided to give
ieee80211_sta_block_awake a try, however, the machine sometimes locked
up while running some performance tests but due to a hw watchdog I
wasn't able to get any sort of backtrace :(

So, while doing some review of the ieee80211_sta_block_awake I came
across this and wondered if softirqs should be disabled when delivering
the buffered frames in sta_unblock.

Using this patch I cannot reproduce the lockup anymore.

So, is there any special reason this single code path in sta_unblock
doesn't disable softirqs?

Thanks,
Helmut

 net/mac80211/sta_info.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 24d321f..5b4ab21 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -238,9 +238,11 @@ static void sta_unblock(struct work_struct *wk)
 	if (sta->dead)
 		return;
 
-	if (!test_sta_flag(sta, WLAN_STA_PS_STA))
+	if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
+		local_bh_disable();
 		ieee80211_sta_ps_deliver_wakeup(sta);
-	else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
+		local_bh_enable();
+	} else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
 		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
 
 		local_bh_disable();
-- 
1.7.7

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux