|
@@ -713,9 +713,14 @@ static int eth_poll(struct napi_struct *napi, int budget)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ rx_ring->cur_index = i;
|
|
|
if (!received) {
|
|
if (!received) {
|
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
|
enable_irq(IRQ_CNS3XXX_SW_R0RXC);
|
|
enable_irq(IRQ_CNS3XXX_SW_R0RXC);
|
|
|
|
|
+
|
|
|
|
|
+ /* if rx descriptors are full schedule another poll */
|
|
|
|
|
+ if (rx_ring->desc[(i-1) & (RX_DESCS-1)].cown)
|
|
|
|
|
+ eth_schedule_poll(sw);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
spin_lock_bh(&tx_lock);
|
|
spin_lock_bh(&tx_lock);
|
|
@@ -724,8 +729,6 @@ static int eth_poll(struct napi_struct *napi, int budget)
|
|
|
|
|
|
|
|
cns3xxx_alloc_rx_buf(sw, received);
|
|
cns3xxx_alloc_rx_buf(sw, received);
|
|
|
|
|
|
|
|
- rx_ring->cur_index = i;
|
|
|
|
|
-
|
|
|
|
|
wmb();
|
|
wmb();
|
|
|
enable_rx_dma(sw);
|
|
enable_rx_dma(sw);
|
|
|
|
|
|