ath9k: fix a crash bug and a dma sync issue

SVN-Revision: 20833
This commit is contained in:
Felix Fietkau 2010-04-12 22:30:47 +00:00
parent 393541dce8
commit 040c064388
2 changed files with 8 additions and 4 deletions

View file

@ -36567,7 +36567,7 @@ index 3c4b5d2..f10bd06 100644
/* set one try for probe rates. For the /* set one try for probe rates. For the
* probes don't enable rts */ * probes don't enable rts */
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 94560e2..9c01c0b 100644 index 94560e2..f84fcf0 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c --- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
@ -36612,7 +36612,7 @@ index 94560e2..9c01c0b 100644
+ +
+ ATH_RXBUF_RESET(bf); + ATH_RXBUF_RESET(bf);
+ memset(skb->data, 0, ah->caps.rx_status_len); + memset(skb->data, 0, ah->caps.rx_status_len);
+ dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr, + dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
+ ah->caps.rx_status_len, DMA_TO_DEVICE); + ah->caps.rx_status_len, DMA_TO_DEVICE);
- /* Initialize rx descriptors */ - /* Initialize rx descriptors */
@ -37061,7 +37061,7 @@ index 94560e2..9c01c0b 100644
+ * 1. accessing the frame + * 1. accessing the frame
+ * 2. requeueing the same buffer to h/w + * 2. requeueing the same buffer to h/w
+ */ + */
+ dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr, + dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
+ common->rx_bufsize, + common->rx_bufsize,
+ DMA_FROM_DEVICE); + DMA_FROM_DEVICE);
+ +

View file

@ -94,8 +94,12 @@
return r; return r;
} }
@@ -2123,11 +2121,8 @@ static void ath_tx_processq(struct ath_s @@ -2121,13 +2119,12 @@ static void ath_tx_processq(struct ath_s
txq->axq_depth--;
txok = !(ts.ts_status & ATH9K_TXERR_MASK);
txq->axq_tx_inprogress = false; txq->axq_tx_inprogress = false;
+ if (bf_held)
+ list_del(&bf_held->list);
spin_unlock_bh(&txq->axq_lock); spin_unlock_bh(&txq->axq_lock);
- if (bf_held) { - if (bf_held) {