Patch "ice: respect netif readiness in AF_XDP ZC related ndo's" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ice: respect netif readiness in AF_XDP ZC related ndo's

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ice-respect-netif-readiness-in-af_xdp-zc-related-ndo.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b24fafdce5efea3d24f9a43845797a2a62ce47b7
Author: Michal Kubiak <michal.kubiak@xxxxxxxxx>
Date:   Fri Jul 26 20:17:09 2024 +0200

    ice: respect netif readiness in AF_XDP ZC related ndo's
    
    [ Upstream commit ec145a18687fec8dd97eeb4f30057fa4debef577 ]
    
    Address a scenario in which XSK ZC Tx produces descriptors to XDP Tx
    ring when link is either not yet fully initialized or process of
    stopping the netdev has already started. To avoid this, add checks
    against carrier readiness in ice_xsk_wakeup() and in ice_xmit_zc().
    One could argue that bailing out early in ice_xsk_wakeup() would be
    sufficient but given the fact that we produce Tx descriptors on behalf
    of NAPI that is triggered for Rx traffic, the latter is also needed.
    
    Bringing link up is an asynchronous event executed within
    ice_service_task so even though interface has been brought up there is
    still a time frame where link is not yet ok.
    
    Without this patch, when AF_XDP ZC Tx is used simultaneously with stack
    Tx, Tx timeouts occur after going through link flap (admin brings
    interface down then up again). HW seem to be unable to transmit
    descriptor to the wire after HW tail register bump which in turn causes
    bit __QUEUE_STATE_STACK_XOFF to be set forever as
    netdev_tx_completed_queue() sees no cleaned bytes on the input.
    
    Fixes: 126cdfe1007a ("ice: xsk: Improve AF_XDP ZC Tx and use batching API")
    Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
    Reviewed-by: Shannon Nelson <shannon.nelson@xxxxxxx>
    Tested-by: Chandan Kumar Rout <chandanx.rout@xxxxxxxxx> (A Contingent Worker at Intel)
    Signed-off-by: Michal Kubiak <michal.kubiak@xxxxxxxxx>
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c
index b917f271cdac1..61e4730bba59e 100644
--- a/drivers/net/ethernet/intel/ice/ice_xsk.c
+++ b/drivers/net/ethernet/intel/ice/ice_xsk.c
@@ -937,6 +937,10 @@ bool ice_xmit_zc(struct ice_tx_ring *xdp_ring)
 
 	ice_clean_xdp_irq_zc(xdp_ring);
 
+	if (!netif_carrier_ok(xdp_ring->vsi->netdev) ||
+	    !netif_running(xdp_ring->vsi->netdev))
+		return true;
+
 	budget = ICE_DESC_UNUSED(xdp_ring);
 	budget = min_t(u16, budget, ICE_RING_QUARTER(xdp_ring));
 
@@ -980,7 +984,7 @@ ice_xsk_wakeup(struct net_device *netdev, u32 queue_id,
 	struct ice_vsi *vsi = np->vsi;
 	struct ice_tx_ring *ring;
 
-	if (test_bit(ICE_VSI_DOWN, vsi->state))
+	if (test_bit(ICE_VSI_DOWN, vsi->state) || !netif_carrier_ok(netdev))
 		return -ENETDOWN;
 
 	if (!ice_is_xdp_ena_vsi(vsi))




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux