On Fri, 2010-02-05 at 19:29 +0530, Vivek Natarajan wrote: > On Fri, Feb 5, 2010 at 7:11 PM, Johannes Berg <johannes@xxxxxxxxxxxxxxxx> wrote: > > > >> @@ -275,6 +274,19 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) > >> local->dot11FailedCount++; > >> } > >> > >> + if (ieee80211_is_nullfunc(fc) && ieee80211_has_pm(fc) && > >> + (local->hw.flags & IEEE80211_HW_TX_STATUS) && > >> + (local->hw.conf.flags & IEEE80211_CONF_PS)) { > >> + if (info->flags & IEEE80211_TX_STAT_ACK) { > >> + local->ps_sdata->u.mgd.flags |= > >> + IEEE80211_STA_NULLFUNC_ACKED; > >> + ieee80211_queue_work(&local->hw, > >> + &local->dynamic_ps_enable_work); > >> + } else > >> + mod_timer(&local->dynamic_ps_timer, jiffies + > >> + msecs_to_jiffies(10)); > >> + } > >> + > >> /* this was a transmitted frame, but now we want to reuse it */ > >> skb_orphan(skb); > > And the mod_timer case is completely useless there anyway, at least the > > way you've done this now. > Ah, right! Thanks for pointing it out. I htink you should only set CONF_PS after the frame is ACKed, otherwise internal stuff might be confused too? johannes
Attachment:
signature.asc
Description: This is a digitally signed message part