On Mon, 2012-01-16 at 16:42 +0100, Helmut Schaa wrote: > 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? This seems right -- not sure where the lockup would be though. johannes > 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(); -- 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