diff options
author | Thommy Jakobsson <thommyj@gmail.com> | 2013-04-23 21:45:11 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-05-08 17:15:06 -0400 |
commit | 73b82bf0bfbf58e6ff328d3726934370585f6e78 (patch) | |
tree | 19c23412ef8e7fbf7353eeb7084bf96c962ed725 /drivers/net/wireless/b43/dma.h | |
parent | db178340433f90e09ada35c174dfb2c84c2c71f4 (diff) | |
download | linux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.tar.gz linux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.tar.bz2 linux-3.10-73b82bf0bfbf58e6ff328d3726934370585f6e78.zip |
B43: Handle DMA RX descriptor underrun
Add handling of rx descriptor underflow. This fixes a fault that could
happen on slow machines, where data is received faster than the CPU can
handle. In such a case the device will use up all rx descriptors and
refuse to send any more data before confirming that it is ok. This
patch enables necessary interrupt to discover such a situation and will
handle them by dropping everything in the ring buffer.
Reviewed-by: Michael Buesch <m@bues.ch>
Signed-off-by: Thommy Jakobsson <thommyj@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/dma.h')
-rw-r--r-- | drivers/net/wireless/b43/dma.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/wireless/b43/dma.h b/drivers/net/wireless/b43/dma.h index 9fdd1983079..df8c8cdcbdb 100644 --- a/drivers/net/wireless/b43/dma.h +++ b/drivers/net/wireless/b43/dma.h @@ -9,7 +9,7 @@ /* DMA-Interrupt reasons. */ #define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \ | (1 << 14) | (1 << 15)) -#define B43_DMAIRQ_NONFATALMASK (1 << 13) +#define B43_DMAIRQ_RDESC_UFLOW (1 << 13) #define B43_DMAIRQ_RX_DONE (1 << 16) /*** 32-bit DMA Engine. ***/ @@ -295,6 +295,8 @@ int b43_dma_tx(struct b43_wldev *dev, void b43_dma_handle_txstatus(struct b43_wldev *dev, const struct b43_txstatus *status); +void b43_dma_handle_rx_overflow(struct b43_dmaring *ring); + void b43_dma_rx(struct b43_dmaring *ring); void b43_dma_direct_fifo_rx(struct b43_wldev *dev, |