On Tue, Feb 01, 2011 at 08:06:58PM +0530, Johannes Berg wrote: > On Tue, 2011-02-01 at 20:04 +0530, Rajkumar Manoharan wrote: > > While leaving oper channel, STA informs sleep state to AP to > > stop sending data. Before sending ack for the nullfunc, AP is > > still sending the data to STA which restarts ps_timer that > > is causing unnecessary nullfunc exchange on timer expiry > > when the STA is on offchannel. So don't restart ps_timer > > on data reception during scan. This issue was identified by > > the following warning. > > > > WARNING: at net/mac80211/tx.c:661 invoke_tx_handlers+0xf07/0x1330 [mac80211] > > wlan0: Dropped data frame as no usable bitrate found while scanning and > > associated. Target station: 00:03:7f:0b:a6:1b on 5 GHz band > > Call Trace: > > [<ffffffffa0413ba7>] invoke_tx_handlers+0xf07/0x1330 [mac80211] > > [<ffffffffa0414056>] ieee80211_tx+0x86/0x2c0 [mac80211] > > [<ffffffffa0414345>] ieee80211_xmit+0xb5/0x1d0 [mac80211] > > [<ffffffffa04037e0>] ieee80211_dynamic_ps_enable_work+0x0/0xb0 [mac80211] > > [<ffffffffa04158cf>] ieee80211_tx_skb+0x4f/0x60 [mac80211] > > [<ffffffffa04026e6>] ieee80211_send_nullfunc+0x46/0x60 [mac80211] > > [<ffffffffa0403885>] ieee80211_dynamic_ps_enable_work+0xa5/0xb0 [mac80211] > > > > Signed-off-by: Rajkumar Manoharan <rmanoharan@xxxxxxxxxxx> > > --- > > net/mac80211/rx.c | 4 +++- > > 1 files changed, 3 insertions(+), 1 deletions(-) > > > > diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c > > index 7185c93..0e02ce9 100644 > > --- a/net/mac80211/rx.c > > +++ b/net/mac80211/rx.c > > @@ -1929,7 +1929,9 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx) > > dev->stats.rx_bytes += rx->skb->len; > > > > if (local->ps_sdata && local->hw.conf.dynamic_ps_timeout > 0 && > > - !is_multicast_ether_addr(((struct ethhdr *)rx->skb->data)->h_dest)) { > > + !is_multicast_ether_addr( > > + ((struct ethhdr *)rx->skb->data)->h_dest) && > > + !local->scanning) { > > What if we're off-channel due to other work like P2P? > Yes. we need to handle offchannel state too. Is it fine to have a check against sdata->state SDATA_STATE_OFFCHANNEL. -- Rajkumar -- 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