|
@@ -809,7 +809,7 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
|
|
|
u16 cleaned_count = ixgbevf_desc_unused(rx_ring);
|
|
|
struct sk_buff *skb = rx_ring->skb;
|
|
|
|
|
|
- do {
|
|
|
+ while (likely(total_rx_packets < budget)) {
|
|
|
union ixgbe_adv_rx_desc *rx_desc;
|
|
|
|
|
|
/* return some buffers to hardware, one at a time is too slow */
|
|
@@ -850,7 +850,6 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
|
|
|
|
|
|
/* probably a little skewed due to removing CRC */
|
|
|
total_rx_bytes += skb->len;
|
|
|
- total_rx_packets++;
|
|
|
|
|
|
/* Workaround hardware that can't do proper VEPA multicast
|
|
|
* source pruning.
|
|
@@ -872,8 +871,8 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
|
|
|
skb = NULL;
|
|
|
|
|
|
/* update budget accounting */
|
|
|
- budget--;
|
|
|
- } while (likely(budget));
|
|
|
+ total_rx_packets++;
|
|
|
+ }
|
|
|
|
|
|
/* place incomplete frames back on ring for completion */
|
|
|
rx_ring->skb = skb;
|