summaryrefslogtreecommitdiffstats
path: root/target/linux/cns3xxx
diff options
context:
space:
mode:
authorKoen Vandeputte <koen.vandeputte@ncentric.com>2016-06-16 13:48:39 +0200
committerJohn Crispin <john@phrozen.org>2016-06-17 04:13:07 +0200
commitf532191c1cefa9950d4064dbd9dd810b90b169bd (patch)
treeae27e52f0577198304eac7fa0dec724a84c6f239 /target/linux/cns3xxx
parent137b1ac5e8df6110a9ecea8a505ff61b64203ced (diff)
downloadmaster-31e0f0ae-f532191c1cefa9950d4064dbd9dd810b90b169bd.tar.gz
master-31e0f0ae-f532191c1cefa9950d4064dbd9dd810b90b169bd.tar.bz2
master-31e0f0ae-f532191c1cefa9950d4064dbd9dd810b90b169bd.zip
cns3xxx: fix RX softIRQ loop
Already reschedule when 1 or more frames came in. Checking for a full queue could produce a re-schedule loop as the checked RX ring location could contain undefined values depending on activity in previous loops. Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Diffstat (limited to 'target/linux/cns3xxx')
-rw-r--r--target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c b/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c
index 2f232c1d29..51b01876ef 100644
--- a/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c
+++ b/target/linux/cns3xxx/files/drivers/net/ethernet/cavium/cns3xxx_eth.c
@@ -717,8 +717,8 @@ static int eth_poll(struct napi_struct *napi, int budget)
enable_irq(sw->rx_irq);
budget = 0;
- /* if rx descriptors are full schedule another poll */
- if (rx_ring->desc[(i-1) & (RX_DESCS-1)].cown)
+ /* If 1 or more frames came in during IRQ enable, re-schedule */
+ if (rx_ring->desc[i].cown)
eth_schedule_poll(sw);
}