|
@@ -1151,7 +1151,7 @@ static inline int myri10ge_clean_rx_done(struct myri10ge_priv *mgp, int budget)
|
|
|
u16 length;
|
|
|
__wsum checksum;
|
|
|
|
|
|
- while (rx_done->entry[idx].length != 0 && work_done++ < budget) {
|
|
|
+ while (rx_done->entry[idx].length != 0 && work_done < budget) {
|
|
|
length = ntohs(rx_done->entry[idx].length);
|
|
|
rx_done->entry[idx].length = 0;
|
|
|
checksum = csum_unfold(rx_done->entry[idx].checksum);
|
|
@@ -1167,6 +1167,7 @@ static inline int myri10ge_clean_rx_done(struct myri10ge_priv *mgp, int budget)
|
|
|
rx_bytes += rx_ok * (unsigned long)length;
|
|
|
cnt++;
|
|
|
idx = cnt & (myri10ge_max_intr_slots - 1);
|
|
|
+ work_done++;
|
|
|
}
|
|
|
rx_done->idx = idx;
|
|
|
rx_done->cnt = cnt;
|
|
@@ -1233,13 +1234,12 @@ static int myri10ge_poll(struct napi_struct *napi, int budget)
|
|
|
struct myri10ge_priv *mgp =
|
|
|
container_of(napi, struct myri10ge_priv, napi);
|
|
|
struct net_device *netdev = mgp->dev;
|
|
|
- struct myri10ge_rx_done *rx_done = &mgp->rx_done;
|
|
|
int work_done;
|
|
|
|
|
|
/* process as many rx events as NAPI will allow */
|
|
|
work_done = myri10ge_clean_rx_done(mgp, budget);
|
|
|
|
|
|
- if (rx_done->entry[rx_done->idx].length == 0 || !netif_running(netdev)) {
|
|
|
+ if (work_done < budget || !netif_running(netdev)) {
|
|
|
netif_rx_complete(netdev, napi);
|
|
|
put_be32(htonl(3), mgp->irq_claim);
|
|
|
}
|