* fm10k_clean_tx_irq - Reclaim resources after transmit completes
  * @q_vector: structure containing interrupt and ring information
  * @tx_ring: tx ring to clean
+ * @napi_budget: Used to determine if we are in netpoll
  **/
 static bool fm10k_clean_tx_irq(struct fm10k_q_vector *q_vector,
-                              struct fm10k_ring *tx_ring)
+                              struct fm10k_ring *tx_ring, int napi_budget)
 {
        struct fm10k_intfc *interface = q_vector->interface;
        struct fm10k_tx_buffer *tx_buffer;
                total_packets += tx_buffer->gso_segs;
 
                /* free the skb */
-               dev_consume_skb_any(tx_buffer->skb);
+               napi_consume_skb(tx_buffer->skb, napi_budget);
 
                /* unmap skb header data */
                dma_unmap_single(tx_ring->dev,
        int per_ring_budget, work_done = 0;
        bool clean_complete = true;
 
-       fm10k_for_each_ring(ring, q_vector->tx)
-               clean_complete &= fm10k_clean_tx_irq(q_vector, ring);
+       fm10k_for_each_ring(ring, q_vector->tx) {
+               if (!fm10k_clean_tx_irq(q_vector, ring, budget))
+                       clean_complete = false;
+       }
 
        /* Handle case where we are called by netpoll with a budget of 0 */
        if (budget <= 0)
                int work = fm10k_clean_rx_irq(q_vector, ring, per_ring_budget);
 
                work_done += work;
-               clean_complete &= !!(work < per_ring_budget);
+               if (work >= per_ring_budget)
+                       clean_complete = false;
        }
 
        /* If all work not completed, return budget and keep polling */