mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
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
@@ -72,7 +72,9 @@ static void ipoib_get_drvinfo(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int ipoib_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
|
||||
@@ -83,7 +85,9 @@ static int ipoib_get_coalesce(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int ipoib_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
int ret;
|
||||
|
||||
@@ -357,7 +357,9 @@ static int ena_get_link_ksettings(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int ena_get_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ena_adapter *adapter = netdev_priv(net_dev);
|
||||
struct ena_com_dev *ena_dev = adapter->ena_dev;
|
||||
@@ -402,7 +404,9 @@ static void ena_update_rx_rings_nonadaptive_intr_moderation(struct ena_adapter *
|
||||
}
|
||||
|
||||
static int ena_set_coalesce(struct net_device *net_dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ena_adapter *adapter = netdev_priv(net_dev);
|
||||
struct ena_com_dev *ena_dev = adapter->ena_dev;
|
||||
|
||||
@@ -428,7 +428,9 @@ static void xgbe_set_msglevel(struct net_device *netdev, u32 msglevel)
|
||||
}
|
||||
|
||||
static int xgbe_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 xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
|
||||
@@ -443,7 +445,9 @@ static int xgbe_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int xgbe_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 xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
|
||||
@@ -547,7 +547,9 @@ static int aq_ethtool_set_rxnfc(struct net_device *ndev,
|
||||
}
|
||||
|
||||
static int aq_ethtool_get_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||
struct aq_nic_cfg_s *cfg;
|
||||
@@ -571,7 +573,9 @@ static int aq_ethtool_get_coalesce(struct net_device *ndev,
|
||||
}
|
||||
|
||||
static int aq_ethtool_set_coalesce(struct net_device *ndev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||
struct aq_nic_cfg_s *cfg;
|
||||
|
||||
@@ -607,7 +607,9 @@ static void bcm_sysport_set_tx_coalesce(struct bcm_sysport_tx_ring *ring,
|
||||
}
|
||||
|
||||
static int bcm_sysport_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 bcm_sysport_priv *priv = netdev_priv(dev);
|
||||
u32 reg;
|
||||
@@ -627,7 +629,9 @@ static int bcm_sysport_get_coalesce(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int bcm_sysport_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 bcm_sysport_priv *priv = netdev_priv(dev);
|
||||
struct dim_cq_moder moder;
|
||||
|
||||
@@ -7242,8 +7242,10 @@ bnx2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
||||
static int bnx2_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2 *bp = netdev_priv(dev);
|
||||
|
||||
@@ -7264,8 +7266,10 @@ bnx2_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
||||
static int bnx2_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2 *bp = netdev_priv(dev);
|
||||
|
||||
|
||||
@@ -1878,7 +1878,9 @@ static int bnx2x_set_eeprom(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int bnx2x_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
@@ -1891,7 +1893,9 @@ static int bnx2x_get_coalesce(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int bnx2x_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
|
||||
|
||||
@@ -49,7 +49,9 @@ static void bnxt_set_msglevel(struct net_device *dev, u32 value)
|
||||
}
|
||||
|
||||
static int bnxt_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
struct bnxt_coal *hw_coal;
|
||||
@@ -79,7 +81,9 @@ static int bnxt_get_coalesce(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int bnxt_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coal)
|
||||
struct ethtool_coalesce *coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
bool update_stats = false;
|
||||
|
||||
@@ -828,7 +828,9 @@ static void bcmgenet_set_msglevel(struct net_device *dev, u32 level)
|
||||
}
|
||||
|
||||
static int bcmgenet_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 bcmgenet_priv *priv = netdev_priv(dev);
|
||||
struct bcmgenet_rx_ring *ring;
|
||||
@@ -890,7 +892,9 @@ static void bcmgenet_set_ring_rx_coalesce(struct bcmgenet_rx_ring *ring,
|
||||
}
|
||||
|
||||
static int bcmgenet_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 bcmgenet_priv *priv = netdev_priv(dev);
|
||||
unsigned int i;
|
||||
|
||||
@@ -14037,7 +14037,10 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int tg3_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tg3 *tp = netdev_priv(dev);
|
||||
|
||||
@@ -14045,7 +14048,10 @@ static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
|
||||
static int tg3_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *ec,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct tg3 *tp = netdev_priv(dev);
|
||||
u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
|
||||
|
||||
@@ -307,8 +307,10 @@ bnad_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wolinfo)
|
||||
wolinfo->wolopts = 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnad_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
||||
static int bnad_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnad *bnad = netdev_priv(netdev);
|
||||
unsigned long flags;
|
||||
@@ -328,8 +330,10 @@ bnad_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bnad_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
|
||||
static int bnad_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bnad *bnad = netdev_priv(netdev);
|
||||
unsigned long flags;
|
||||
|
||||
@@ -2108,7 +2108,9 @@ static int octnet_set_intrmod_cfg(struct lio *lio,
|
||||
}
|
||||
|
||||
static int lio_get_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *intr_coal)
|
||||
struct ethtool_coalesce *intr_coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct octeon_device *oct = lio->oct_dev;
|
||||
@@ -2412,7 +2414,9 @@ oct_cfg_tx_intrcnt(struct lio *lio,
|
||||
}
|
||||
|
||||
static int lio_set_intr_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *intr_coal)
|
||||
struct ethtool_coalesce *intr_coal,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
int ret;
|
||||
|
||||
@@ -456,7 +456,9 @@ static void nicvf_get_regs(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int nicvf_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *cmd)
|
||||
struct ethtool_coalesce *cmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nicvf *nic = netdev_priv(netdev);
|
||||
|
||||
|
||||
@@ -748,7 +748,9 @@ static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
|
||||
@@ -759,7 +761,9 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
|
||||
|
||||
@@ -1996,7 +1996,9 @@ static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
@@ -2017,7 +2019,9 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
|
||||
@@ -1147,7 +1147,9 @@ static int set_dbqtimer_tickval(struct net_device *dev,
|
||||
}
|
||||
|
||||
static int set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -1163,7 +1165,9 @@ static int set_coalesce(struct net_device *dev,
|
||||
coalesce->tx_coalesce_usecs);
|
||||
}
|
||||
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c)
|
||||
static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
const struct adapter *adap = pi->adapter;
|
||||
|
||||
@@ -1647,7 +1647,9 @@ static int cxgb4vf_set_ringparam(struct net_device *dev,
|
||||
* interrupt holdoff timer to be read on all of the device's Queue Sets.
|
||||
*/
|
||||
static int cxgb4vf_get_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
const struct adapter *adapter = pi->adapter;
|
||||
@@ -1667,7 +1669,9 @@ static int cxgb4vf_get_coalesce(struct net_device *dev,
|
||||
* the interrupt holdoff timer on any of the device's Queue Sets.
|
||||
*/
|
||||
static int cxgb4vf_set_coalesce(struct net_device *dev,
|
||||
struct ethtool_coalesce *coalesce)
|
||||
struct ethtool_coalesce *coalesce,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct port_info *pi = netdev_priv(dev);
|
||||
struct adapter *adapter = pi->adapter;
|
||||
|
||||
@@ -298,7 +298,9 @@ static void enic_set_msglevel(struct net_device *netdev, u32 value)
|
||||
}
|
||||
|
||||
static int enic_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct enic *enic = netdev_priv(netdev);
|
||||
struct enic_rx_coal *rxcoal = &enic->rx_coalesce_setting;
|
||||
@@ -343,7 +345,9 @@ static int enic_coalesce_valid(struct enic *enic,
|
||||
}
|
||||
|
||||
static int enic_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct enic *enic = netdev_priv(netdev);
|
||||
u32 tx_coalesce_usecs;
|
||||
|
||||
@@ -2144,7 +2144,9 @@ static int gmac_set_ringparam(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int gmac_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
|
||||
@@ -2156,7 +2158,9 @@ static int gmac_get_coalesce(struct net_device *netdev,
|
||||
}
|
||||
|
||||
static int gmac_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *ecmd)
|
||||
struct ethtool_coalesce *ecmd,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
|
||||
|
||||
@@ -315,7 +315,9 @@ static int be_read_dump_data(struct be_adapter *adapter, u32 dump_len,
|
||||
}
|
||||
|
||||
static int be_get_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *et)
|
||||
struct ethtool_coalesce *et,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_aic_obj *aic = &adapter->aic_obj[0];
|
||||
@@ -338,7 +340,9 @@ static int be_get_coalesce(struct net_device *netdev,
|
||||
* eqd cmd is issued in the worker thread.
|
||||
*/
|
||||
static int be_set_coalesce(struct net_device *netdev,
|
||||
struct ethtool_coalesce *et)
|
||||
struct ethtool_coalesce *et,
|
||||
struct kernel_ethtool_coalesce *kernel_coal,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_aic_obj *aic = &adapter->aic_obj[0];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user