Patch "igc: Expose tx-usecs coalesce setting to user" has been added to the 6.5-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

    igc: Expose tx-usecs coalesce setting to user

to the 6.5-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:
     igc-expose-tx-usecs-coalesce-setting-to-user.patch
and it can be found in the queue-6.5 subdirectory.

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



commit 82a8f3fae549ab6f6b5acdf91d439d69fe3b0ef2
Author: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@xxxxxxxxx>
Date:   Tue Sep 19 10:03:31 2023 -0700

    igc: Expose tx-usecs coalesce setting to user
    
    [ Upstream commit 1703b2e0de653b459ca6230be32ce7f2ea0ae7ee ]
    
    When users attempt to obtain the coalesce setting using the
    ethtool command, current code always returns 0 for tx-usecs.
    This is because I225/6 always uses a queue pair setting, hence
    tx_coalesce_usecs does not return a value during the
    igc_ethtool_get_coalesce() callback process. The pair queue
    condition checking in igc_ethtool_get_coalesce() is removed by
    this patch so that the user gets information of the value of tx-usecs.
    
    Even if i225/6 is using queue pair setting, there is no harm in
    notifying the user of the tx-usecs. The implementation of the current
    code may have previously been a copy of the legacy code i210.
    Since I225 has the queue pair setting enabled, tx-usecs will always adhere
    to the user-set rx-usecs value. An error message will appear when the user
    attempts to set the tx-usecs value for the input parameters because,
    by default, they should only set the rx-usecs value.
    
    This patch also adds the helper function to get the
    previous rx coalesce value similar to tx coalesce.
    
    How to test:
    User can get the coalesce value using ethtool command.
    
    Example command:
    Get: ethtool -c <interface>
    
    Previous output:
    
    rx-usecs: 3
    rx-frames: n/a
    rx-usecs-irq: n/a
    rx-frames-irq: n/a
    
    tx-usecs: 0
    tx-frames: n/a
    tx-usecs-irq: n/a
    tx-frames-irq: n/a
    
    New output:
    
    rx-usecs: 3
    rx-frames: n/a
    rx-usecs-irq: n/a
    rx-frames-irq: n/a
    
    tx-usecs: 3
    tx-frames: n/a
    tx-usecs-irq: n/a
    tx-frames-irq: n/a
    
    Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
    Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@xxxxxxxxx>
    Tested-by: Naama Meir <naamax.meir@xxxxxxxxxxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20230919170331.1581031-1-anthony.l.nguyen@xxxxxxxxx
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 93bce729be76a..7ab6dd58e4001 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -868,6 +868,18 @@ static void igc_ethtool_get_stats(struct net_device *netdev,
 	spin_unlock(&adapter->stats64_lock);
 }
 
+static int igc_ethtool_get_previous_rx_coalesce(struct igc_adapter *adapter)
+{
+	return (adapter->rx_itr_setting <= 3) ?
+		adapter->rx_itr_setting : adapter->rx_itr_setting >> 2;
+}
+
+static int igc_ethtool_get_previous_tx_coalesce(struct igc_adapter *adapter)
+{
+	return (adapter->tx_itr_setting <= 3) ?
+		adapter->tx_itr_setting : adapter->tx_itr_setting >> 2;
+}
+
 static int igc_ethtool_get_coalesce(struct net_device *netdev,
 				    struct ethtool_coalesce *ec,
 				    struct kernel_ethtool_coalesce *kernel_coal,
@@ -875,17 +887,8 @@ static int igc_ethtool_get_coalesce(struct net_device *netdev,
 {
 	struct igc_adapter *adapter = netdev_priv(netdev);
 
-	if (adapter->rx_itr_setting <= 3)
-		ec->rx_coalesce_usecs = adapter->rx_itr_setting;
-	else
-		ec->rx_coalesce_usecs = adapter->rx_itr_setting >> 2;
-
-	if (!(adapter->flags & IGC_FLAG_QUEUE_PAIRS)) {
-		if (adapter->tx_itr_setting <= 3)
-			ec->tx_coalesce_usecs = adapter->tx_itr_setting;
-		else
-			ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2;
-	}
+	ec->rx_coalesce_usecs = igc_ethtool_get_previous_rx_coalesce(adapter);
+	ec->tx_coalesce_usecs = igc_ethtool_get_previous_tx_coalesce(adapter);
 
 	return 0;
 }
@@ -910,8 +913,12 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
 	    ec->tx_coalesce_usecs == 2)
 		return -EINVAL;
 
-	if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) && ec->tx_coalesce_usecs)
+	if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) &&
+	    ec->tx_coalesce_usecs != igc_ethtool_get_previous_tx_coalesce(adapter)) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Queue Pair mode enabled, both Rx and Tx coalescing controlled by rx-usecs");
 		return -EINVAL;
+	}
 
 	/* If ITR is disabled, disable DMAC */
 	if (ec->rx_coalesce_usecs == 0) {



[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