blob: 1035f9f01074dbf1abfe48fe9f79389061e86678 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
---
drivers/serial/atmel_usart.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
===================================================================
--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-11-24 15:59:38.000000000 +0100
+++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-11-24 15:59:46.000000000 +0100
@@ -194,8 +194,14 @@ static inline int rx_dma_update_tail(str
usart3_writel(up, RNCR, RX_BUFFER_SIZE);
again = 1;
- } else
- BUG_ON(usart3_readl(up, CSR) & USART3_BIT(ENDRX));
+ } else if(usart3_readl(up, CSR) & USART3_BIT(ENDRX)) {
+ /*
+ * The USART hit the end of the buffer after head was
+ * updated. Let's do another pass so that we can
+ * avoid taking another interrupt immediately.
+ */
+ again = 1;
+ }
up->rx_tail = tail;
|