]> www.infradead.org Git - users/willy/xarray.git/commitdiff
ice: xsk: fix cleaned_count setting
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Mon, 13 Dec 2021 15:31:11 +0000 (16:31 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 17 Dec 2021 19:18:21 +0000 (11:18 -0800)
Currently cleaned_count is initialized to ICE_DESC_UNUSED(rx_ring) and
later on during the Rx processing it is incremented per each frame that
driver consumed. This can result in excessive buffers requested from xsk
pool based on that value.

To address this, just drop cleaned_count and pass
ICE_DESC_UNUSED(rx_ring) directly as a function argument to
ice_alloc_rx_bufs_zc(). Idea is to ask for buffers as many as consumed.

Let us also call ice_alloc_rx_bufs_zc unconditionally at the end of
ice_clean_rx_irq_zc. This has been changed in that way for corresponding
ice_clean_rx_irq, but not here.

Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: Kiran Bhandare <kiranx.bhandare@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_txrx.h
drivers/net/ethernet/intel/ice/ice_xsk.c

index c56dd17499031614b85baad828447e198f2d2854..b7b3bd4816f0d1ffa5a34e7e4e5d75193d759ccd 100644 (file)
@@ -24,7 +24,6 @@
 #define ICE_MAX_DATA_PER_TXD_ALIGNED \
        (~(ICE_MAX_READ_REQ_SIZE - 1) & ICE_MAX_DATA_PER_TXD)
 
-#define ICE_RX_BUF_WRITE       16      /* Must be power of 2 */
 #define ICE_MAX_TXQ_PER_TXQG   128
 
 /* Attempt to maximize the headroom available for incoming frames. We use a 2K
index c1491dc0675da7936d6b599b462775f6577a7047..c895351b25e0aebb72b6aa7cb466cbd9e52fa503 100644 (file)
@@ -505,7 +505,6 @@ out_failure:
 int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
 {
        unsigned int total_rx_bytes = 0, total_rx_packets = 0;
-       u16 cleaned_count = ICE_DESC_UNUSED(rx_ring);
        struct ice_tx_ring *xdp_ring;
        unsigned int xdp_xmit = 0;
        struct bpf_prog *xdp_prog;
@@ -562,7 +561,6 @@ int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
 
                        total_rx_bytes += size;
                        total_rx_packets++;
-                       cleaned_count++;
 
                        ice_bump_ntc(rx_ring);
                        continue;
@@ -575,7 +573,6 @@ construct_skb:
                        break;
                }
 
-               cleaned_count++;
                ice_bump_ntc(rx_ring);
 
                if (eth_skb_pad(skb)) {
@@ -597,8 +594,7 @@ construct_skb:
                ice_receive_skb(rx_ring, skb, vlan_tag);
        }
 
-       if (cleaned_count >= ICE_RX_BUF_WRITE)
-               failure = !ice_alloc_rx_bufs_zc(rx_ring, cleaned_count);
+       failure = !ice_alloc_rx_bufs_zc(rx_ring, ICE_DESC_UNUSED(rx_ring));
 
        ice_finalize_xdp_rx(xdp_ring, xdp_xmit);
        ice_update_rx_ring_stats(rx_ring, total_rx_packets, total_rx_bytes);