diff options
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_xsk.c | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c index ffa9a160766a..c1491dc0675d 100644 --- a/drivers/net/ethernet/intel/ice/ice_xsk.c +++ b/drivers/net/ethernet/intel/ice/ice_xsk.c @@ -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) { |