struct ixgbe_tx_buffer *tx_buffer;
        union ixgbe_adv_tx_desc *tx_desc;
        unsigned int total_bytes = 0, total_packets = 0;
+       u16 budget = q_vector->tx.work_limit;
        u16 i = tx_ring->next_to_clean;
-       u16 count;
 
        tx_buffer = &tx_ring->tx_buffer_info[i];
        tx_desc = IXGBE_TX_DESC_ADV(tx_ring, i);
 
-       for (count = 0; count < q_vector->tx.work_limit; count++) {
+       for (; budget; budget--) {
                union ixgbe_adv_tx_desc *eop_desc = tx_buffer->next_to_watch;
 
                /* if next_to_watch is not set then there is no work pending */
                ixgbe_tx_timeout_reset(adapter);
 
                /* the adapter is about to reset, no point in enabling stuff */
-               return true;
+               return budget;
        }
 
 #define TX_WAKE_THRESHOLD (DESC_NEEDED * 2)
-       if (unlikely(count && netif_carrier_ok(tx_ring->netdev) &&
+       if (unlikely(total_packets && netif_carrier_ok(tx_ring->netdev) &&
                     (ixgbe_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD))) {
                /* Make sure that anybody stopping the queue after this
                 * sees the new next_to_clean.
                }
        }
 
-       return count < q_vector->tx.work_limit;
+       return budget;
 }
 
 #ifdef CONFIG_IXGBE_DCA