Browse Source

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 <[email protected]>
Koen Vandeputte 9 years ago
parent
commit
f532191c1c

+ 2 - 2
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);
 	}