]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ice: xsk: allow empty Rx descriptors on XSK ZC data path
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Mon, 13 Dec 2021 15:31:10 +0000 (16:31 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 17 Dec 2021 19:16:55 +0000 (11:16 -0800)
Commit ac6f733a7bd5 ("ice: allow empty Rx descriptors") stated that ice
HW can produce empty descriptors that are valid and they should be
processed.

Add this support to xsk ZC path to avoid potential processing problems.

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_xsk.c

index ffa9a160766aecf2f64dfb660a348a4777a7ea65..c1491dc0675da7936d6b599b462775f6577a7047 100644 (file)
@@ -538,12 +538,18 @@ int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
                 */
                dma_rmb();
 
+               xdp = *ice_xdp_buf(rx_ring, rx_ring->next_to_clean);
+
                size = le16_to_cpu(rx_desc->wb.pkt_len) &
                                   ICE_RX_FLX_DESC_PKT_LEN_M;
-               if (!size)
-                       break;
+               if (!size) {
+                       xdp->data = NULL;
+                       xdp->data_end = NULL;
+                       xdp->data_hard_start = NULL;
+                       xdp->data_meta = NULL;
+                       goto construct_skb;
+               }
 
-               xdp = *ice_xdp_buf(rx_ring, rx_ring->next_to_clean);
                xsk_buff_set_size(xdp, size);
                xsk_buff_dma_sync_for_cpu(xdp, rx_ring->xsk_pool);
 
@@ -561,7 +567,7 @@ int ice_clean_rx_irq_zc(struct ice_rx_ring *rx_ring, int budget)
                        ice_bump_ntc(rx_ring);
                        continue;
                }
-
+construct_skb:
                /* XDP_PASS path */
                skb = ice_construct_skb_zc(rx_ring, xdp);
                if (!skb) {