2013-11-13 11:28:18

by Kalle Valo

[permalink] [raw]
Subject: [PATCH] ath10k: remove htt rx amsdu clear retry bit hack

With commit 0cfcefef1 ("mac80211: support reporting A-MSDU subframes
individually") there's no need to have the hack to clear the retry bit in
ath10k_htt_rx_amsdu(), mac80211 can handle this properly now.

Signed-off-by: Kalle Valo <[email protected]>
---
drivers/net/wireless/ath/ath10k/htt_rx.c | 17 -----------------
1 file changed, 17 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 90d4f74..76c152b 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -659,23 +659,6 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
memcpy(hdr_buf, hdr, hdr_len);
hdr = (struct ieee80211_hdr *)hdr_buf;

- /* FIXME: Hopefully this is a temporary measure.
- *
- * Reporting individual A-MSDU subframes means each reported frame
- * shares the same sequence number.
- *
- * mac80211 drops frames it recognizes as duplicates, i.e.
- * retransmission flag is set and sequence number matches sequence
- * number from a previous frame (as per IEEE 802.11-2012: 9.3.2.10
- * "Duplicate detection and recovery")
- *
- * To avoid frames being dropped clear retransmission flag for all
- * received A-MSDUs.
- *
- * Worst case: actual duplicate frames will be reported but this should
- * still be handled gracefully by other OSI/ISO layers. */
- hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_RETRY);
-
first = skb;
while (skb) {
void *decap_hdr;



2013-11-13 13:23:38

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath10k: remove htt rx amsdu clear retry bit hack

Michal Kazior <[email protected]> writes:

>> - /* FIXME: Hopefully this is a temporary measure.
>> - *
>> - * Reporting individual A-MSDU subframes means each reported frame
>> - * shares the same sequence number.
>> - *
>> - * mac80211 drops frames it recognizes as duplicates, i.e.
>> - * retransmission flag is set and sequence number matches sequence
>> - * number from a previous frame (as per IEEE 802.11-2012: 9.3.2.10
>> - * "Duplicate detection and recovery")
>> - *
>> - * To avoid frames being dropped clear retransmission flag for all
>> - * received A-MSDUs.
>> - *
>> - * Worst case: actual duplicate frames will be reported but this should
>> - * still be handled gracefully by other OSI/ISO layers. */
>> - hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_RETRY);
>> -
>> first = skb;
>> while (skb) {
>> void *decap_hdr;
>>
>
> You're missing RX_FLAG_AMSDU_MORE. All subframes (except the last one)
> from an A-MSDU that are reported separately must have the bit set in
> status->flag. Only then mac80211 can apply retransmission/duplication
> check properly.

I'll send v2, thanks for the review.

--
Kalle Valo

2013-11-13 11:38:06

by Michal Kazior

[permalink] [raw]
Subject: Re: [PATCH] ath10k: remove htt rx amsdu clear retry bit hack

On 13 November 2013 12:28, Kalle Valo <[email protected]> wrote:
> With commit 0cfcefef1 ("mac80211: support reporting A-MSDU subframes
> individually") there's no need to have the hack to clear the retry bit in
> ath10k_htt_rx_amsdu(), mac80211 can handle this properly now.
>
> Signed-off-by: Kalle Valo <[email protected]>
> ---
> drivers/net/wireless/ath/ath10k/htt_rx.c | 17 -----------------
> 1 file changed, 17 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
> index 90d4f74..76c152b 100644
> --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
> +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
> @@ -659,23 +659,6 @@ static void ath10k_htt_rx_amsdu(struct ath10k_htt *htt,
> memcpy(hdr_buf, hdr, hdr_len);
> hdr = (struct ieee80211_hdr *)hdr_buf;
>
> - /* FIXME: Hopefully this is a temporary measure.
> - *
> - * Reporting individual A-MSDU subframes means each reported frame
> - * shares the same sequence number.
> - *
> - * mac80211 drops frames it recognizes as duplicates, i.e.
> - * retransmission flag is set and sequence number matches sequence
> - * number from a previous frame (as per IEEE 802.11-2012: 9.3.2.10
> - * "Duplicate detection and recovery")
> - *
> - * To avoid frames being dropped clear retransmission flag for all
> - * received A-MSDUs.
> - *
> - * Worst case: actual duplicate frames will be reported but this should
> - * still be handled gracefully by other OSI/ISO layers. */
> - hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_RETRY);
> -
> first = skb;
> while (skb) {
> void *decap_hdr;
>

You're missing RX_FLAG_AMSDU_MORE. All subframes (except the last one)
from an A-MSDU that are reported separately must have the bit set in
status->flag. Only then mac80211 can apply retransmission/duplication
check properly.


MichaƂ