Merge tag 'net-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[sfrench/cifs-2.6.git] / drivers / net / ethernet / intel / i40e / i40e_txrx.c
index 121cd99fdeff719f7daa2955f074f18d12ea4de9..de70c16ef619aaafcd2fcbb30fc460ee8f5f71a1 100644 (file)
@@ -1961,10 +1961,6 @@ static bool i40e_cleanup_headers(struct i40e_ring *rx_ring, struct sk_buff *skb,
                                 union i40e_rx_desc *rx_desc)
 
 {
-       /* XDP packets use error pointer so abort at this point */
-       if (IS_ERR(skb))
-               return true;
-
        /* ERR_MASK will only have valid bits if EOP set, and
         * what we are doing here is actually checking
         * I40E_RX_DESC_ERROR_RXE_SHIFT, since it is the zeroth bit in
@@ -2534,7 +2530,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
                }
 
                /* exit if we failed to retrieve a buffer */
-               if (!skb) {
+               if (!xdp_res && !skb) {
                        rx_ring->rx_stats.alloc_buff_failed++;
                        rx_buffer->pagecnt_bias++;
                        break;
@@ -2547,7 +2543,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
                if (i40e_is_non_eop(rx_ring, rx_desc))
                        continue;
 
-               if (i40e_cleanup_headers(rx_ring, skb, rx_desc)) {
+               if (xdp_res || i40e_cleanup_headers(rx_ring, skb, rx_desc)) {
                        skb = NULL;
                        continue;
                }