[3.5.y.z,extended,stable] Patch "ath9k: do not link receive buffers during flush" has been added to staging queue

Submitted by Herton Ronaldo Krzesinski on Jan. 31, 2013, 10:09 p.m.


Message ID 1359670170-16146-1-git-send-email-herton.krzesinski@canonical.com
State New
Headers show

Commit Message

Herton Ronaldo Krzesinski Jan. 31, 2013, 10:09 p.m.
This is a note to let you know that I have just added a patch titled

    ath9k: do not link receive buffers during flush

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:


If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 627384f21b01455e94d82c396719052a5c1d324c Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Wed, 9 Jan 2013 16:16:52 +0100
Subject: [PATCH] ath9k: do not link receive buffers during flush

commit a3dc48e82bb146ef11cf75676c8410c1df29b0c4 upstream.

On AR9300 the rx FIFO needs to be empty during reset to ensure that no
further DMA activity is generated, otherwise it might lead to memory
corruption issues.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
 drivers/net/wireless/ath/ath9k/recv.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)


Patch hide | download patch | download mbox

diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index af3bbf2..14b4d07 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -778,6 +778,7 @@  static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc,
 			return NULL;

+	list_del(&bf->list);
 	if (!bf->bf_mpdu)
 		return bf;

@@ -1988,14 +1989,15 @@  requeue_drop_frag:
 			sc->rx.frag = NULL;
+		list_add_tail(&bf->list, &sc->rx.rxbuf);
+		if (flush)
+			continue;
 		if (edma) {
-			list_add_tail(&bf->list, &sc->rx.rxbuf);
 			ath_rx_edma_buf_link(sc, qtype);
 		} else {
-			list_move_tail(&bf->list, &sc->rx.rxbuf);
 			ath_rx_buf_link(sc, bf);
-			if (!flush)
-				ath9k_hw_rxena(ah);
+			ath9k_hw_rxena(ah);
 	} while (1);