Patch "i40e: fix receiving of single packets in xsk zero-copy mode" has been added to the 5.11-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

    i40e: fix receiving of single packets in xsk zero-copy mode

to the 5.11-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:
     i40e-fix-receiving-of-single-packets-in-xsk-zero-cop.patch
and it can be found in the queue-5.11 subdirectory.

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



commit 3566e37f5fa092c4e26aa25bdcf6e5bd9080e86b
Author: Magnus Karlsson <magnus.karlsson@xxxxxxxxx>
Date:   Fri Mar 19 10:44:10 2021 +0100

    i40e: fix receiving of single packets in xsk zero-copy mode
    
    [ Upstream commit 528060ef3e1105c5c3eba66ffbfc80e0825e2cce ]
    
    Fix so that single packets are received immediately instead of in
    batches of 8. If you sent 1 pps to a system, you received 8 packets
    every 8 seconds instead of 1 packet every second. The problem behind
    this was that the work_done reporting from the Tx part of the driver
    was broken. The work_done reporting in i40e controls not only the
    reporting back to the napi logic but also the setting of the interrupt
    throttling logic. When Tx or Rx reports that it has more to do,
    interrupts are throttled or coalesced and when they both report that
    they are done, interrupts are armed right away. If the wrong work_done
    value is returned, the logic will start to throttle interrupts in a
    situation where it should have just enabled them. This leads to the
    undesired batching behavior seen in user-space.
    
    Fix this by returning the correct boolean value from the Tx xsk
    zero-copy path. Return true if there is nothing to do or if we got
    fewer packets to process than we asked for. Return false if we got as
    many packets as the budget since there might be more packets we can
    process.
    
    Fixes: 3106c580fb7c ("i40e: Use batched xsk Tx interfaces to increase performance")
    Reported-by: Sreedevi Joshi <sreedevi.joshi@xxxxxxxxx>
    Signed-off-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx>
    Acked-by: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx>
    Tested-by: Kiran Bhandare <kiranx.bhandare@xxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
index 37a21fb99922..7949f6b79f92 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
@@ -462,7 +462,7 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
 
 	nb_pkts = xsk_tx_peek_release_desc_batch(xdp_ring->xsk_pool, descs, budget);
 	if (!nb_pkts)
-		return false;
+		return true;
 
 	if (xdp_ring->next_to_use + nb_pkts >= xdp_ring->count) {
 		nb_processed = xdp_ring->count - xdp_ring->next_to_use;
@@ -479,7 +479,7 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
 
 	i40e_update_tx_stats(xdp_ring, nb_pkts, total_bytes);
 
-	return true;
+	return nb_pkts < budget;
 }
 
 /**



[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