Search Linux Wireless

Re: [PATCH 1/2] ath9k: Drain txq before sending a nullfunc frame.

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

 



Adding Greg for real this time.

  Luis

On Thu, Feb 3, 2011 at 11:36 PM, Luis R. Rodriguez <mcgrof@xxxxxxxxx> wrote:
> On Thu, Feb 3, 2011 at 10:23 PM, Vivek Natarajan <vnatarajan@xxxxxxxxxxx> wrote:
>> In a highly noisy environment, a data frame which is queued before
>> a nullfunc frame on a different hw queue may be sent over the air
>> after the tx completion of nullfunc frame. This causes the station
>> to enter power save and the AP to see the station as awake and
>> continues to send the data traffic. Fix this by draining all tx
>> queues before we send the null function frame with PM bit set.
>>
>> Signed-off-by: Vivek Natarajan <vnatarajan@xxxxxxxxxxx>
>
> Hm nice, this is a good example of one of those random not-so-critical
> but still nice fixes which I wish would go to stable. John, Greg, any
> qualms for such things to go to stable if they apply? It was my
> impression we could send it, but I want to verify with both you guys
> so neither we or John get bashed if we try to send it as a stable fix.
>
> Vivek, is this applicable to stable kernels or does the hunk not even apply?
>
> ÂLuis
>
>> ---
>> Âdrivers/net/wireless/ath/ath9k/xmit.c | Â 10 +++++++++-
>> Â1 files changed, 9 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
>> index 68a1c76..0cb6017 100644
>> --- a/drivers/net/wireless/ath/ath9k/xmit.c
>> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
>> @@ -1710,7 +1710,6 @@ static struct ath_buf *ath_tx_setup_buffer(struct ieee80211_hw *hw,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Âbf->bf_buf_addr,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Âtxq->axq_qnum);
>>
>> -
>> Â Â Â Âreturn bf;
>> Â}
>>
>> @@ -1813,6 +1812,15 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
>> Â Â Â Âif (unlikely(!bf))
>> Â Â Â Â Â Â Â Âreturn -ENOMEM;
>>
>> + Â Â Â if (ieee80211_is_nullfunc(hdr->frame_control) &&
>> + Â Â Â Â Â ieee80211_has_pm(hdr->frame_control)) {
>> + Â Â Â Â Â Â Â /* Drain all the pending frames before we send a nullfunc frame
>> + Â Â Â Â Â Â Â Â* to avoid any power save state mismatch between the station
>> + Â Â Â Â Â Â Â Â* and the AP.
>> + Â Â Â Â Â Â Â Â*/
>> + Â Â Â Â Â Â Â ath_drain_all_txq(sc, false);
>> + Â Â Â }
>> +
>> Â Â Â Âq = skb_get_queue_mapping(skb);
>> Â Â Â Âspin_lock_bh(&txq->axq_lock);
>> Â Â Â Âif (txq == sc->tx.txq_map[q] &&
>> --
>> 1.6.3.3
>>
>> --
>> 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
>>
>
--
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