Search Linux Wireless

Re: Bisected: ath9k: fix powersave frame filtering/buffering in AP mode broke STA association.

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

 



On 2011-05-05 10:44 PM, Ben Greear wrote:
> I bisected the problem I was having with ath9k STA configured for WPA
> not being able to authenticate.  I'm using nohwcrypt=1, which may
> be why no one else sees it.
> 
> According to bisect, this is the first bad commit:
> 
> commit 5519541d5a5f19893546883547e2f0f2e5934df7
> Author: Felix Fietkau<nbd@xxxxxxxxxxx>
> Date:   Sun Apr 17 23:28:09 2011 +0200
> 
>       ath9k: fix powersave frame filtering/buffering in AP mode
> 
>       This patch fixes a long standing issue of pending packets in the queue being
>       sent (and retransmitted many times) to sleeping stations.
>       This was made worse by aggregation through driver-internal retransmitting
>       of A-MDPU subframes.
>       Previously the hardware tx filter was cleared unconditionally for every
>       single packet - with this patch it uses the IEEE80211_TX_CTL_CLEAR_PS_FILT
>       for unaggregated frames.
>       A sta_notify driver op is added to stop aggregation for stations when they
>       enter powersave mode. Subframes stay buffered inside the driver, to ensure
>       that the BlockAck window keeps a sane state.
>       Since the driver uses software aggregation, the clearing of the tx filter
>       needs to be handled by the driver instead of mac80211 for aggregated frames.
> 
>       Signed-off-by: Felix Fietkau<nbd@xxxxxxxxxxx>
>       Signed-off-by: John W. Linville<linville@xxxxxxxxxxxxx>
> 
> 
> I'll be happy to test patches, it seems very easy to reproduce on
> my setup.
How about this?

--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1270,6 +1270,9 @@ ieee80211_tx_prepare(struct ieee80211_su
 		info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
 	else if (test_and_clear_sta_flags(tx->sta, WLAN_STA_CLEAR_PS_FILT))
 		info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
+	else if (sdata->vif.type != NL80211_IFTYPE_AP &&
+	         sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
+		info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
 
 	hdrlen = ieee80211_hdrlen(hdr->frame_control);
 	if (skb->len > hdrlen + sizeof(rfc1042_header) + 2) {
--
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