ethtool: extend coalesce setting uAPI with CQE mode
In order to support more coalesce parameters through netlink, add two new parameter kernel_coal and extack for .set_coalesce and .get_coalesce, then some extra info can return to user with the netlink API. Signed-off-by: Yufeng Mo <moyufeng@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
029ee6b143
commit
f3ccfda193
@@ -1739,7 +1739,9 @@ static int e1000_set_phys_id(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int e1000_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -1755,7 +1757,9 @@ static int e1000_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int e1000_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
@@ -1993,7 +1993,9 @@ static int e1000_set_phys_id(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int e1000_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -2006,7 +2008,9 @@ static int e1000_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int e1000_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
||||
@@ -632,7 +632,9 @@ clear_reset:
|
||||
}
|
||||
|
||||
static int fm10k_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
|
||||
@@ -646,7 +648,9 @@ static int fm10k_get_coalesce(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int fm10k_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
u16 tx_itr, rx_itr;
|
||||
|
||||
@@ -2812,13 +2812,17 @@ static int __i40e_get_coalesce(struct net_device *netdev,
|
||||
* i40e_get_coalesce - get a netdev's coalesce settings
|
||||
* @netdev: the netdev to check
|
||||
* @ec: ethtool coalesce data structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Gets the coalesce settings for a particular netdev. Note that if user has
|
||||
* modified per-queue settings, this only guarantees to represent queue 0. See
|
||||
* __i40e_get_coalesce for more details.
|
||||
**/
|
||||
static int i40e_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __i40e_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
@@ -2986,11 +2990,15 @@ static int __i40e_set_coalesce(struct net_device *netdev,
|
||||
* i40e_set_coalesce - set coalesce settings for every queue on the netdev
|
||||
* @netdev: the netdev to change
|
||||
* @ec: ethtool coalesce settings
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* This will set each queue to the same coalesce settings.
|
||||
**/
|
||||
static int i40e_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __i40e_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
||||
@@ -685,6 +685,8 @@ static int __iavf_get_coalesce(struct net_device *netdev,
|
||||
* iavf_get_coalesce - Get interrupt coalescing settings
|
||||
* @netdev: network interface device structure
|
||||
* @ec: ethtool coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Returns current coalescing settings. This is referred to elsewhere in the
|
||||
* driver as Interrupt Throttle Rate, as this is how the hardware describes
|
||||
@@ -692,7 +694,9 @@ static int __iavf_get_coalesce(struct net_device *netdev,
|
||||
* only represents the settings of queue 0.
|
||||
**/
|
||||
static int iavf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __iavf_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
@@ -804,11 +808,15 @@ static int __iavf_set_coalesce(struct net_device *netdev,
|
||||
* iavf_set_coalesce - Set interrupt coalescing settings
|
||||
* @netdev: network interface device structure
|
||||
* @ec: ethtool coalesce structure
|
||||
* @kernel_coal: ethtool CQE mode setting structure
|
||||
* @extack: extack for reporting error messages
|
||||
*
|
||||
* Change current coalescing settings for every queue.
|
||||
**/
|
||||
static int iavf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __iavf_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
||||
@@ -3568,8 +3568,10 @@ __ice_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ice_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int ice_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __ice_get_coalesce(netdev, ec, -1);
|
||||
}
|
||||
@@ -3787,8 +3789,10 @@ set_complete:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ice_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
|
||||
static int ice_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
return __ice_set_coalesce(netdev, ec, -1);
|
||||
}
|
||||
|
||||
@@ -2182,7 +2182,9 @@ static int igb_set_phys_id(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igb_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
@@ -2238,7 +2240,9 @@ static int igb_set_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igb_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igb_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
||||
@@ -314,7 +314,9 @@ static int igbvf_set_wol(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igbvf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igbvf_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -327,7 +329,9 @@ static int igbvf_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igbvf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igbvf_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
@@ -862,7 +862,9 @@ static void igc_ethtool_get_stats(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igc_ethtool_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -882,7 +884,9 @@ static int igc_ethtool_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int igc_ethtool_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
|
||||
@@ -2358,7 +2358,9 @@ static int ixgbe_set_phys_id(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int ixgbe_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -2412,7 +2414,9 @@ static bool ixgbe_update_rsc(struct ixgbe_adapter *adapter)
|
||||
}
|
||||
|
||||
static int ixgbe_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbe_q_vector *q_vector;
|
||||
|
||||
@@ -787,7 +787,9 @@ static int ixgbevf_nway_reset(struct net_device *netdev)
|
||||
}
|
||||
|
||||
static int ixgbevf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@@ -811,7 +813,9 @@ static int ixgbevf_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int ixgbevf_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ec)
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbevf_q_vector *q_vector;
|
||||
|
||||
Reference in New Issue
Block a user