Linux wireless drivers development
 help / color / mirror / Atom feed
From: Sujith Manoharan <sujith@msujith.org>
To: John Linville <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org
Subject: [RFC 14/15] ath9k: Fix error condition for corrupt descriptors
Date: Mon, 12 Aug 2013 15:11:41 +0530	[thread overview]
Message-ID: <1376300502-2741-15-git-send-email-sujith@msujith.org> (raw)
In-Reply-To: <1376300502-2741-1-git-send-email-sujith@msujith.org>

From: Sujith Manoharan <c_manoha@qca.qualcomm.com>

In case a descriptor has the "done" bit clear and the
next descriptor has it set, we drop both of them. If
the packet that is received after these two packets
is dropped for some reason, "discard_next" will not cleared.
Fix this.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
 drivers/net/wireless/ath/ath9k/recv.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 0965bf6..a00e1b6 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -1068,6 +1068,7 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
 	struct ath_common *common = ath9k_hw_common(ah);
 	struct ieee80211_hdr *hdr;
 	bool discard_current = sc->rx.discard_next;
+	int ret = 0;
 
 	/*
 	 * Discard corrupt descriptors which are marked in
@@ -1106,8 +1107,10 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
 	 * This is different from the other corrupt descriptor
 	 * condition handled above.
 	 */
-	if (rx_stats->rs_status & ATH9K_RXERR_CORRUPT_DESC)
-		return -EINVAL;
+	if (rx_stats->rs_status & ATH9K_RXERR_CORRUPT_DESC) {
+		ret = -EINVAL;
+		goto exit;
+	}
 
 	hdr = (struct ieee80211_hdr *) (skb->data + ah->caps.rx_status_len);
 
@@ -1123,18 +1126,23 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
 		if (ath_process_fft(sc, hdr, rx_stats, rx_status->mactime))
 			RX_STAT_INC(rx_spectral);
 
-		return -EINVAL;
+		ret = -EINVAL;
+		goto exit;
 	}
 
 	/*
 	 * everything but the rate is checked here, the rate check is done
 	 * separately to avoid doing two lookups for a rate for each frame.
 	 */
-	if (!ath9k_rx_accept(common, hdr, rx_status, rx_stats, decrypt_error))
-		return -EINVAL;
+	if (!ath9k_rx_accept(common, hdr, rx_status, rx_stats, decrypt_error)) {
+		ret = -EINVAL;
+		goto exit;
+	}
 
-	if (ath9k_process_rate(common, hw, rx_stats, rx_status))
-		return -EINVAL;
+	if (ath9k_process_rate(common, hw, rx_stats, rx_status)) {
+		ret = -EINVAL;
+		goto exit;
+	}
 
 	rx_stats->is_mybeacon = ath9k_is_mybeacon(sc, hdr);
 	if (rx_stats->is_mybeacon) {
@@ -1152,15 +1160,15 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
 	if (rx_stats->rs_moreaggr)
 		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
 
-	sc->rx.discard_next = false;
-
 #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
 	if (ieee80211_is_data_present(hdr->frame_control) &&
 	    !ieee80211_is_qos_nullfunc(hdr->frame_control))
 		sc->rx.num_pkts++;
 #endif
 
-	return 0;
+exit:
+	sc->rx.discard_next = false;
+	return ret;
 }
 
 static void ath9k_rx_skb_postprocess(struct ath_common *common,
-- 
1.8.3.4


  parent reply	other threads:[~2013-08-12  9:45 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-12  9:41 [RFC 00/15] ath9k patches Sujith Manoharan
2013-08-12  9:41 ` [RFC 01/15] ath9k: Add MAX_AMSDU to supported HT capabilities Sujith Manoharan
2013-08-13  9:44   ` Felix Fietkau
2013-08-13 10:14     ` Sujith Manoharan
2013-08-12  9:41 ` [RFC 02/15] ath9k: Use a subroutine to check for "mybeacon" Sujith Manoharan
2013-08-12  9:41 ` [RFC 03/15] ath9k: Fix phy error handling for DFS Sujith Manoharan
2013-08-12  9:41 ` [RFC 04/15] ath9k: Discard invalid frames early Sujith Manoharan
2013-08-12  9:41 ` [RFC 05/15] ath9k: Fix RX crypto processing Sujith Manoharan
2013-08-12  9:41 ` [RFC 06/15] ath9k: Fix TSF processing Sujith Manoharan
2013-08-12  9:41 ` [RFC 07/15] ath9k: Reorder some functions Sujith Manoharan
2013-08-12  9:41 ` [RFC 08/15] ath9k: Fix PHY error processing Sujith Manoharan
2013-08-12  9:41 ` [RFC 09/15] ath9k: Fix RX debug statistics Sujith Manoharan
2013-08-12  9:41 ` [RFC 10/15] ath9k: Fix RX packet counter Sujith Manoharan
2013-08-12  9:41 ` [RFC 11/15] ath9k: Fix RX beacon processing Sujith Manoharan
2013-08-12  9:41 ` [RFC 12/15] ath9k: Move the RX poll check to preprocess() Sujith Manoharan
2013-08-12  9:41 ` [RFC 13/15] ath9k: Handle corrupt descriptors properly Sujith Manoharan
2013-08-12  9:41 ` Sujith Manoharan [this message]
2013-08-12  9:41 ` [RFC 15/15] ath9k: Remove unused function argument Sujith Manoharan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1376300502-2741-15-git-send-email-sujith@msujith.org \
    --to=sujith@msujith.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox