ethtool: extend coalesce setting uAPI with CQE mode
authorYufeng Mo <moyufeng@huawei.com>
Fri, 20 Aug 2021 07:35:18 +0000 (15:35 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 24 Aug 2021 14:38:29 +0000 (07:38 -0700)
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>
85 files changed:
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
drivers/net/ethernet/amazon/ena/ena_ethtool.c
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
drivers/net/ethernet/broadcom/bcmsysport.c
drivers/net/ethernet/broadcom/bnx2.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/brocade/bna/bnad_ethtool.c
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c
drivers/net/ethernet/chelsio/cxgb/cxgb2.c
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
drivers/net/ethernet/cisco/enic/enic_ethtool.c
drivers/net/ethernet/cortina/gemini.c
drivers/net/ethernet/emulex/benet/be_ethtool.c
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/freescale/gianfar_ethtool.c
drivers/net/ethernet/hisilicon/hip04_eth.c
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
drivers/net/ethernet/intel/e1000/e1000_ethtool.c
drivers/net/ethernet/intel/e1000e/ethtool.c
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/iavf/iavf_ethtool.c
drivers/net/ethernet/intel/ice/ice_ethtool.c
drivers/net/ethernet/intel/igb/igb_ethtool.c
drivers/net/ethernet/intel/igbvf/ethtool.c
drivers/net/ethernet/intel/igc/igc_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbevf/ethtool.c
drivers/net/ethernet/jme.c
drivers/net/ethernet/marvell/mv643xx_eth.c
drivers/net/ethernet/marvell/mvneta.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
drivers/net/ethernet/marvell/skge.c
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
drivers/net/ethernet/myricom/myri10ge/myri10ge.c
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
drivers/net/ethernet/ni/nixge.c
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
drivers/net/ethernet/qlogic/netxen/netxen_nic_ethtool.c
drivers/net/ethernet/qlogic/qede/qede.h
drivers/net/ethernet/qlogic/qede/qede_ethtool.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
drivers/net/ethernet/realtek/r8169_main.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c
drivers/net/ethernet/sfc/ethtool.c
drivers/net/ethernet/sfc/falcon/ethtool.c
drivers/net/ethernet/socionext/netsec.c
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
drivers/net/ethernet/synopsys/dwc-xlgmac-ethtool.c
drivers/net/ethernet/tehuti/tehuti.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/ethernet/ti/cpsw_ethtool.c
drivers/net/ethernet/ti/cpsw_new.c
drivers/net/ethernet/ti/cpsw_priv.h
drivers/net/ethernet/ti/davinci_emac.c
drivers/net/ethernet/via/via-velocity.c
drivers/net/ethernet/xilinx/ll_temac_main.c
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
drivers/net/netdevsim/ethtool.c
drivers/net/tun.c
drivers/net/usb/r8152.c
drivers/net/virtio_net.c
drivers/net/vmxnet3/vmxnet3_ethtool.c
drivers/net/wireless/ath/wil6210/ethtool.c
drivers/s390/net/qeth_ethtool.c
drivers/staging/qlge/qlge_ethtool.c
include/linux/ethtool.h
net/ethtool/coalesce.c
net/ethtool/ioctl.c

index 823f6831e7eac11ac756f8b8a54fd48a1db4699e..a09ca21f7dff8efda3542005deae03d7733daa2c 100644 (file)
@@ -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;
index 27dae632efcb8cb83a4e8c8383d0c677f7e965d1..13e745cf3781b2e58d1e4af6716fa5361dc5db77 100644 (file)
@@ -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;
index 61f39a0e04f95801e2092632c39a56c7cfd4d1f4..bafc51c34e0be375bbf8622ce2a787276e35a5e1 100644 (file)
@@ -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;
index de2a9348bc3f87c6a1804b7c4c4a2c706cfd029b..a9ef0544e30f0b9b428756ffeab74a2de8139703 100644 (file)
@@ -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;
index d9f0f0df8f7bbf6d4b4225a90e268e9cb3bdbd8c..7fa1b695400d78938b60153726334ebaa5b11450 100644 (file)
@@ -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;
index dc3ee576360b76337176bd4bc7650dbd93878b71..a705e2615307889a996b184d50bf50256e8d71ae 100644 (file)
@@ -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);
 
index 32245bbe88a83819e99c7b4cb964145ac36cee12..472a3a478038ae9af1ceccf1cf10fb14f4383ede 100644 (file)
@@ -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);
 
index 364460ef8db74ba02ae3410efe82555eaa7bbd19..9f8c72d952281b104ed37ff65d7021b5c5486054 100644 (file)
@@ -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;
index 8507198992df612fba0f9656cf2ee0d60c4234a2..23c7595d2a1d3f0f8ba89df4719cf098629a3767 100644 (file)
@@ -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;
index eefb070a68d2293db06be39ace53abe347c4aac9..8a238e349e02b83ca8914d403edadcdd725ca26e 100644 (file)
@@ -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;
index 265c2fa6bbe0515d807d3abd2f888b66a595d9c9..391b85f25141f8fb687626cd2bc15bc106bcf25e 100644 (file)
@@ -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;
index 66f2c553370c6ad7329ad5cf3ae87bc326d42654..2b9747867d4cf56284024a835a17240ea308a752 100644 (file)
@@ -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;
index 2f218fbfed0615cfe85721d7f9fe173cdb589288..7f2882109b16147aed7aa61e7e4d5f5627713b11 100644 (file)
@@ -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);
 
index e7575d41f4f5bb13099b847eace551a4371ef47e..73c016166f0641a8b3bad326d839ab20e2020b6b 100644 (file)
@@ -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;
 
index 538f737af4fa6d38415b7b59181d198225cb3b66..38e47703f9abd98ab3137e0a35566894b7ad7041 100644 (file)
@@ -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;
index 83ed10ac86606c65a47584d1267fc237fc6a58c2..5903bdb78916fa62b18dc579dea4277801c3cb7d 100644 (file)
@@ -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;
index e5882df551ec08468c96008a131e70f4b518e655..49b76fd47daa0f9deefff776f250909c6d2a3c4c 100644 (file)
@@ -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;
index 1a9803f2073ef5e3643b37ae2ff096267cc45da7..12ffc14fbecd8e11b41c242c1a2d1e01bf1169d2 100644 (file)
@@ -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;
index c2ebb3388789a3628a80b65dea9cf7fc254d3845..6e745ca4c4333dd89051b8cce0d1789c1b01d30c 100644 (file)
@@ -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);
 
index 99cc1c46fb301a21a542fc6b108ecf04b1c9f89f..f9955308b93d6292718986aa887360f7f745d689 100644 (file)
@@ -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];
index 1268996b703015a86fbcfa8404ffa9d587ac621c..763d2c7b5fb1a78225ad757e1aee7578ab310c36 100644 (file)
@@ -513,7 +513,9 @@ static int dpaa_get_ts_info(struct net_device *net_dev,
 }
 
 static int dpaa_get_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *c)
+                            struct ethtool_coalesce *c,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct qman_portal *portal;
        u32 period;
@@ -530,7 +532,9 @@ static int dpaa_get_coalesce(struct net_device *dev,
 }
 
 static int dpaa_set_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *c)
+                            struct ethtool_coalesce *c,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        const cpumask_t *cpus = qman_affine_cpus();
        bool needs_revert[NR_CPUS] = {false};
index ebccaf02411c93cd32bca99041f386a21204903e..9690e36e9e8554fdf17220af3f6913f9a67f096f 100644 (file)
@@ -585,7 +585,9 @@ static void enetc_get_ringparam(struct net_device *ndev,
 }
 
 static int enetc_get_coalesce(struct net_device *ndev,
-                             struct ethtool_coalesce *ic)
+                             struct ethtool_coalesce *ic,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct enetc_ndev_priv *priv = netdev_priv(ndev);
        struct enetc_int_vector *v = priv->int_vector[0];
@@ -602,7 +604,9 @@ static int enetc_get_coalesce(struct net_device *ndev,
 }
 
 static int enetc_set_coalesce(struct net_device *ndev,
-                             struct ethtool_coalesce *ic)
+                             struct ethtool_coalesce *ic,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct enetc_ndev_priv *priv = netdev_priv(ndev);
        u32 rx_ictt, tx_ictt;
index 83ab34b1d7357efa8e479bca15f9bcec02cf9aae..80bd5c629fa00fd787b39cdf931edfb5c8b5296f 100644 (file)
@@ -2654,8 +2654,10 @@ static void fec_enet_itr_coal_set(struct net_device *ndev)
        }
 }
 
-static int
-fec_enet_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
+static int fec_enet_get_coalesce(struct net_device *ndev,
+                                struct ethtool_coalesce *ec,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct fec_enet_private *fep = netdev_priv(ndev);
 
@@ -2671,8 +2673,10 @@ fec_enet_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
        return 0;
 }
 
-static int
-fec_enet_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)
+static int fec_enet_set_coalesce(struct net_device *ndev,
+                                struct ethtool_coalesce *ec,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct fec_enet_private *fep = netdev_priv(ndev);
        struct device *dev = &fep->pdev->dev;
@@ -2724,7 +2728,7 @@ static void fec_enet_itr_coal_init(struct net_device *ndev)
        ec.tx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT;
        ec.tx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT;
 
-       fec_enet_set_coalesce(ndev, &ec);
+       fec_enet_set_coalesce(ndev, &ec, NULL, NULL);
 }
 
 static int fec_enet_get_tunable(struct net_device *netdev,
index cc7d4f93da5408376fb60758a38832b9e6ac531b..7b32ed29bf4cbe5723cfaf43df4d91b7d2f1471d 100644 (file)
@@ -243,7 +243,9 @@ static unsigned int gfar_ticks2usecs(struct gfar_private *priv,
 /* Get the coalescing parameters, and put them in the cvals
  * structure.  */
 static int gfar_gcoalesce(struct net_device *dev,
-                         struct ethtool_coalesce *cvals)
+                         struct ethtool_coalesce *cvals,
+                         struct kernel_ethtool_coalesce *kernel_coal,
+                         struct netlink_ext_ack *extack)
 {
        struct gfar_private *priv = netdev_priv(dev);
        struct gfar_priv_rx_q *rx_queue = NULL;
@@ -280,7 +282,9 @@ static int gfar_gcoalesce(struct net_device *dev,
  * in order for coalescing to be active
  */
 static int gfar_scoalesce(struct net_device *dev,
-                         struct ethtool_coalesce *cvals)
+                         struct ethtool_coalesce *cvals,
+                         struct kernel_ethtool_coalesce *kernel_coal,
+                         struct netlink_ext_ack *extack)
 {
        struct gfar_private *priv = netdev_priv(dev);
        int i, err = 0;
index e53512f6878afd43c8fe4e0eaaf2f1740fe49d5b..37b605fed32c311108174dc35a2015669d385f75 100644 (file)
@@ -796,7 +796,9 @@ static void hip04_tx_timeout_task(struct work_struct *work)
 }
 
 static int hip04_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 hip04_priv *priv = netdev_priv(netdev);
 
@@ -807,7 +809,9 @@ static int hip04_get_coalesce(struct net_device *netdev,
 }
 
 static int hip04_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 hip04_priv *priv = netdev_priv(netdev);
 
index 7e62dcff242647cfb975d713d1decc219387f13e..ab73902259427b9d5c29bd8ec48b18c703a89581 100644 (file)
@@ -730,11 +730,15 @@ static int hns_set_pauseparam(struct net_device *net_dev,
  * hns_get_coalesce - get coalesce info.
  * @net_dev: net device
  * @ec: coalesce info.
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack: extack for reporting error messages
  *
  * Return 0 on success, negative on failure.
  */
 static int hns_get_coalesce(struct net_device *net_dev,
-                           struct ethtool_coalesce *ec)
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct hns_nic_priv *priv = netdev_priv(net_dev);
        struct hnae_ae_ops *ops;
@@ -774,11 +778,15 @@ static int hns_get_coalesce(struct net_device *net_dev,
  * hns_set_coalesce - set coalesce info.
  * @net_dev: net device
  * @ec: coalesce info.
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack: extack for reporting error messages
  *
  * Return 0 on success, negative on failure.
  */
 static int hns_set_coalesce(struct net_device *net_dev,
-                           struct ethtool_coalesce *ec)
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct hns_nic_priv *priv = netdev_priv(net_dev);
        struct hnae_ae_ops *ops;
index 8351050157630da2f59d804be755a6702ddcb204..049be076fd1857c84bf7f58c36f339a459b3356d 100644 (file)
@@ -1179,7 +1179,9 @@ static void hns3_get_channels(struct net_device *netdev,
 }
 
 static int hns3_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 hns3_nic_priv *priv = netdev_priv(netdev);
        struct hns3_enet_coalesce *tx_coal = &priv->tx_coal;
@@ -1361,7 +1363,9 @@ static void hns3_set_coalesce_per_queue(struct net_device *netdev,
 }
 
 static int hns3_set_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 hnae3_handle *h = hns3_get_handle(netdev);
        struct hns3_nic_priv *priv = netdev_priv(netdev);
index 162d3c330dec12ddada40de7a527eb9365736928..b431c300ef1b9d01b27ea6bc6398b41120d4a434 100644 (file)
@@ -795,13 +795,17 @@ static int __hinic_set_coalesce(struct net_device *netdev,
 }
 
 static int hinic_get_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        return __hinic_get_coalesce(netdev, coal, COALESCE_ALL_QUEUE);
 }
 
 static int hinic_set_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        return __hinic_set_coalesce(netdev, coal, COALESCE_ALL_QUEUE);
 }
index 3c51ee94fa00b847191296af9a90352088044d59..0a57172dfcbc4e1e5ee88a98d7d8b1e8adcd25cd 100644 (file)
@@ -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;
index 7256b43b7a65377d0f77dfa7735de8b8dff9221b..8515e00d1b400c1347df9f4062486424a01492ee 100644 (file)
@@ -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);
 
index 66776ba7bfb6043a46f598908d88bd37813578b5..0d37f011d0ceafb1384ff5cfcf504451718772dd 100644 (file)
@@ -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;
index 2c9e4eeb7270d49d2fa299ffd9f943096d116f75..513ba697435594e0749bbb3ba7817f2ccb3caa12 100644 (file)
@@ -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);
 }
index edbeb27213f8368785fcfe6807791afa56bf383d..5a359a0a20ecc2f4a0f6a75b07e45b19c48bfadf 100644 (file)
@@ -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);
 }
index d95a5daca11471d2f311da925653234f7d696e0b..c451cf401e635b7c966ab37225176beffa1fe4d9 100644 (file)
@@ -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);
 }
index 17f5c003c3df156d8012ba7e841d8487241dfaf3..fb1029352c3e744c1ce18482f15dde0ade22ed11 100644 (file)
@@ -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);
 
index f4835eb62fee0ca0422f280c42cba013f25b5ce1..06e5bd646a0ef0d3ca3e3e8278b42f021c610092 100644 (file)
@@ -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;
index d3e84416248e84218aafef0aecbcb928737f15a0..e0a76ac1bbbcd5b6df90ba6a5246ed8ac18bfc1e 100644 (file)
@@ -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;
index 4ceaca0f6ce30e07214510f415629202e325e72e..fc26e4ddeb0dcf48922a1e91bbc5049874e6e5db 100644 (file)
@@ -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;
index e49fb1cd9a9901206bb2f73bf81fef3c1095204e..8380f905e708e3beb7d655041c05e811bfa58c99 100644 (file)
@@ -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;
index 438c5602fbc54f3deba50776dabc29cff8f83bfc..1bdc4f23e1e575e4beafb4c86cc274a5b18d43a5 100644 (file)
@@ -2385,8 +2385,10 @@ jme_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p)
        mdio_memcpy(jme, p32, JME_PHY_REG_NR);
 }
 
-static int
-jme_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
+static int jme_get_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ecmd,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct jme_adapter *jme = netdev_priv(netdev);
 
@@ -2422,8 +2424,10 @@ jme_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
        return 0;
 }
 
-static int
-jme_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecmd)
+static int jme_set_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ecmd,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct jme_adapter *jme = netdev_priv(netdev);
        struct dynpcc_info *dpi = &(jme->dpi);
index 6502c5c2ebcaac54fa2aa305a4e6d367f05fed7d..28d5ad296646aef44c4cb15f8aa3aebe37270bc2 100644 (file)
@@ -1611,8 +1611,10 @@ static void mv643xx_eth_get_drvinfo(struct net_device *dev,
        strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
 }
 
-static int
-mv643xx_eth_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
+static int mv643xx_eth_get_coalesce(struct net_device *dev,
+                                   struct ethtool_coalesce *ec,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
@@ -1622,8 +1624,10 @@ mv643xx_eth_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
        return 0;
 }
 
-static int
-mv643xx_eth_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
+static int mv643xx_eth_set_coalesce(struct net_device *dev,
+                                   struct ethtool_coalesce *ec,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
index 5d1007e1b5c981963bca910b940a7cbf13547d8f..0e6d4070186249174019c33f7bd416029be7cddc 100644 (file)
@@ -4500,8 +4500,11 @@ static int mvneta_ethtool_nway_reset(struct net_device *dev)
 }
 
 /* Set interrupt coalescing for ethtools */
-static int mvneta_ethtool_set_coalesce(struct net_device *dev,
-                                      struct ethtool_coalesce *c)
+static int
+mvneta_ethtool_set_coalesce(struct net_device *dev,
+                           struct ethtool_coalesce *c,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct mvneta_port *pp = netdev_priv(dev);
        int queue;
@@ -4524,8 +4527,11 @@ static int mvneta_ethtool_set_coalesce(struct net_device *dev,
 }
 
 /* get coalescing for ethtools */
-static int mvneta_ethtool_get_coalesce(struct net_device *dev,
-                                      struct ethtool_coalesce *c)
+static int
+mvneta_ethtool_get_coalesce(struct net_device *dev,
+                           struct ethtool_coalesce *c,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct mvneta_port *pp = netdev_priv(dev);
 
index 744f58f41ecccf2e4f2cbf644b8545436d0539da..d5c92e43f89e6ab5b694884abb2336f9c4af9d75 100644 (file)
@@ -5367,8 +5367,11 @@ static int mvpp2_ethtool_nway_reset(struct net_device *dev)
 }
 
 /* Set interrupt coalescing for ethtools */
-static int mvpp2_ethtool_set_coalesce(struct net_device *dev,
-                                     struct ethtool_coalesce *c)
+static int
+mvpp2_ethtool_set_coalesce(struct net_device *dev,
+                          struct ethtool_coalesce *c,
+                          struct kernel_ethtool_coalesce *kernel_coal,
+                          struct netlink_ext_ack *extack)
 {
        struct mvpp2_port *port = netdev_priv(dev);
        int queue;
@@ -5400,8 +5403,11 @@ static int mvpp2_ethtool_set_coalesce(struct net_device *dev,
 }
 
 /* get coalescing for ethtools */
-static int mvpp2_ethtool_get_coalesce(struct net_device *dev,
-                                     struct ethtool_coalesce *c)
+static int
+mvpp2_ethtool_get_coalesce(struct net_device *dev,
+                          struct ethtool_coalesce *c,
+                          struct kernel_ethtool_coalesce *kernel_coal,
+                          struct netlink_ext_ack *extack)
 {
        struct mvpp2_port *port = netdev_priv(dev);
 
index 0151d6d939d4a305b7853dc4f2681807a4c8f5cf..5ce087686a1f3ca4c73d247226161d916243cdda 100644 (file)
@@ -412,7 +412,9 @@ static int otx2_set_ringparam(struct net_device *netdev,
 }
 
 static int otx2_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 otx2_nic *pfvf = netdev_priv(netdev);
        struct otx2_hw *hw = &pfvf->hw;
@@ -426,7 +428,9 @@ static int otx2_get_coalesce(struct net_device *netdev,
 }
 
 static int otx2_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 otx2_nic *pfvf = netdev_priv(netdev);
        struct otx2_hw *hw = &pfvf->hw;
index 150c06ee3627717ae0eea8e5dbd6a1cab0281d85..051dd3fb5b0382c48e88ec0df6b7a615a34bf06e 100644 (file)
@@ -615,7 +615,9 @@ static inline u32 skge_usecs2clk(const struct skge_hw *hw, u32 usec)
 }
 
 static int skge_get_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *ecmd)
+                            struct ethtool_coalesce *ecmd,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct skge_port *skge = netdev_priv(dev);
        struct skge_hw *hw = skge->hw;
@@ -639,7 +641,9 @@ static int skge_get_coalesce(struct net_device *dev,
 
 /* Note: interrupt timer is per board, but can turn on/off per port */
 static int skge_set_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *ecmd)
+                            struct ethtool_coalesce *ecmd,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct skge_port *skge = netdev_priv(dev);
        struct skge_hw *hw = skge->hw;
index dc9dd77d1ea064f104a66ca8a567d19684016d30..e9fc74e54b22e5eb8216ce279c0fb2fe490f1b8b 100644 (file)
@@ -4052,7 +4052,9 @@ static int sky2_set_pauseparam(struct net_device *dev,
 }
 
 static int sky2_get_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *ecmd)
+                            struct ethtool_coalesce *ecmd,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct sky2_port *sky2 = netdev_priv(dev);
        struct sky2_hw *hw = sky2->hw;
@@ -4087,7 +4089,9 @@ static int sky2_get_coalesce(struct net_device *dev,
 
 /* Note: this affect both ports */
 static int sky2_set_coalesce(struct net_device *dev,
-                            struct ethtool_coalesce *ecmd)
+                            struct ethtool_coalesce *ecmd,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct sky2_port *sky2 = netdev_priv(dev);
        struct sky2_hw *hw = sky2->hw;
index 3616b77caa0adb407288c51297e580a7f415bb13..ef518b1040f7234f7bc84259aa308ee10bbeab22 100644 (file)
@@ -998,7 +998,9 @@ mlx4_en_set_link_ksettings(struct net_device *dev,
 }
 
 static int mlx4_en_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 mlx4_en_priv *priv = netdev_priv(dev);
 
@@ -1020,7 +1022,9 @@ static int mlx4_en_get_coalesce(struct net_device *dev,
 }
 
 static int mlx4_en_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 mlx4_en_priv *priv = netdev_priv(dev);
 
index 5696d3f1baaf1382729add22a909261f958c58a7..2cfd12953909bd2cfbf66c95637583e417565083 100644 (file)
@@ -534,7 +534,9 @@ int mlx5e_ethtool_get_coalesce(struct mlx5e_priv *priv,
 }
 
 static int mlx5e_get_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(netdev);
 
@@ -652,7 +654,9 @@ int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
 }
 
 static int mlx5e_set_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv    = netdev_priv(netdev);
 
index eb83f27850c782e4c529437ed236176cabd2f580..ae71a17fdb277bfed76ee9041a1c0fe2607f4e88 100644 (file)
@@ -251,7 +251,9 @@ static int mlx5e_rep_set_channels(struct net_device *dev,
 }
 
 static int mlx5e_rep_get_coalesce(struct net_device *netdev,
-                                 struct ethtool_coalesce *coal)
+                                 struct ethtool_coalesce *coal,
+                                 struct kernel_ethtool_coalesce *kernel_coal,
+                                 struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(netdev);
 
@@ -259,7 +261,9 @@ static int mlx5e_rep_get_coalesce(struct net_device *netdev,
 }
 
 static int mlx5e_rep_set_coalesce(struct net_device *netdev,
-                                 struct ethtool_coalesce *coal)
+                                 struct ethtool_coalesce *coal,
+                                 struct kernel_ethtool_coalesce *kernel_coal,
+                                 struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(netdev);
 
index 0e487ec57d5c291f9db1f144244c72f970e6eae0..0c8594c7df21d0bdf3b407dcdbad93716eaeef32 100644 (file)
@@ -99,7 +99,9 @@ static void mlx5i_get_channels(struct net_device *dev,
 }
 
 static int mlx5i_set_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(netdev);
 
@@ -107,7 +109,9 @@ static int mlx5i_set_coalesce(struct net_device *netdev,
 }
 
 static int mlx5i_get_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coal)
+                             struct ethtool_coalesce *coal,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(netdev);
 
index 7359a8b768e9edb900c82da6177b553d3793eb9a..c1a75b08ced7e6ed5d89f9697dfe50e66fd7a424 100644 (file)
@@ -1652,8 +1652,10 @@ myri10ge_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *info)
        strlcpy(info->bus_info, pci_name(mgp->pdev), sizeof(info->bus_info));
 }
 
-static int
-myri10ge_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
+static int myri10ge_get_coalesce(struct net_device *netdev,
+                                struct ethtool_coalesce *coal,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct myri10ge_priv *mgp = netdev_priv(netdev);
 
@@ -1661,8 +1663,10 @@ myri10ge_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
        return 0;
 }
 
-static int
-myri10ge_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coal)
+static int myri10ge_set_coalesce(struct net_device *netdev,
+                                struct ethtool_coalesce *coal,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct myri10ge_priv *mgp = netdev_priv(netdev);
 
index 0bf2ff5717bc23598e94059d0d403b9eeb331bc1..0685ece1f155d974a889d493666bff922159f22c 100644 (file)
@@ -1078,7 +1078,9 @@ static void nfp_net_get_regs(struct net_device *netdev,
 }
 
 static int nfp_net_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 nfp_net *nn = netdev_priv(netdev);
 
@@ -1330,7 +1332,9 @@ exit_close_nsp:
 }
 
 static int nfp_net_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 nfp_net *nn = netdev_priv(netdev);
        unsigned int factor;
index 2d097dcb7bdadc8ab3b4e5d1998b3476449bef87..36fe2c0f31ffc579ec06167405cb40668f2b7123 100644 (file)
@@ -993,8 +993,11 @@ static void nixge_ethtools_get_drvinfo(struct net_device *ndev,
        strlcpy(ed->bus_info, "platform", sizeof(ed->bus_info));
 }
 
-static int nixge_ethtools_get_coalesce(struct net_device *ndev,
-                                      struct ethtool_coalesce *ecoalesce)
+static int
+nixge_ethtools_get_coalesce(struct net_device *ndev,
+                           struct ethtool_coalesce *ecoalesce,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct nixge_priv *priv = netdev_priv(ndev);
        u32 regval = 0;
@@ -1008,8 +1011,11 @@ static int nixge_ethtools_get_coalesce(struct net_device *ndev,
        return 0;
 }
 
-static int nixge_ethtools_set_coalesce(struct net_device *ndev,
-                                      struct ethtool_coalesce *ecoalesce)
+static int
+nixge_ethtools_set_coalesce(struct net_device *ndev,
+                           struct ethtool_coalesce *ecoalesce,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct nixge_priv *priv = netdev_priv(ndev);
 
index adc9fdb03e86050651da95a5db5ddb5716ff0d7f..e91b4874a57f08fe2d4828c024bf9eb4024e1d01 100644 (file)
@@ -420,7 +420,9 @@ static int ionic_set_fecparam(struct net_device *netdev,
 }
 
 static int ionic_get_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coalesce)
+                             struct ethtool_coalesce *coalesce,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct ionic_lif *lif = netdev_priv(netdev);
 
@@ -438,7 +440,9 @@ static int ionic_get_coalesce(struct net_device *netdev,
 }
 
 static int ionic_set_coalesce(struct net_device *netdev,
-                             struct ethtool_coalesce *coalesce)
+                             struct ethtool_coalesce *coalesce,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct ionic_lif *lif = netdev_priv(netdev);
        struct ionic_identity *ident;
index dd22cb056d031eca5d08da2da275071a091c66b4..a075643f582655e4fc1e3c482a4e64f1fd69be84 100644 (file)
@@ -731,7 +731,9 @@ netxen_nic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
  * firmware coalescing to default.
  */
 static int netxen_set_intr_coalesce(struct net_device *netdev,
-                       struct ethtool_coalesce *ethcoal)
+                                   struct ethtool_coalesce *ethcoal,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct netxen_adapter *adapter = netdev_priv(netdev);
 
@@ -775,7 +777,9 @@ static int netxen_set_intr_coalesce(struct net_device *netdev,
 }
 
 static int netxen_get_intr_coalesce(struct net_device *netdev,
-                       struct ethtool_coalesce *ethcoal)
+                                   struct ethtool_coalesce *ethcoal,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct netxen_adapter *adapter = netdev_priv(netdev);
 
index 66c69f0f9af1610a8092f102fa170f89765b5cc7..f90dcfe9ee688694045d3ae317c03c0a9a217e61 100644 (file)
@@ -580,7 +580,9 @@ int qede_add_tc_flower_fltr(struct qede_dev *edev, __be16 proto,
                            struct flow_cls_offload *f);
 
 void qede_forced_speed_maps_init(void);
-int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal);
+int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack);
 int qede_set_per_coalesce(struct net_device *dev, u32 queue,
                          struct ethtool_coalesce *coal);
 
index 9c6aa6859646dfba472fc079b21aab142ff9c04b..8284c4c1528f79eead74f898418c61820324039c 100644 (file)
@@ -760,7 +760,9 @@ static int qede_flash_device(struct net_device *dev,
 }
 
 static int qede_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)
 {
        void *rx_handle = NULL, *tx_handle = NULL;
        struct qede_dev *edev = netdev_priv(dev);
@@ -819,7 +821,9 @@ out:
        return rc;
 }
 
-int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
+int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack)
 {
        struct qede_dev *edev = netdev_priv(dev);
        struct qede_fastpath *fp;
index f6b6651decf3149342d344ebbd5e1df636e867a9..fc364b4ab6ebade602751c3b004409b2787abbf8 100644 (file)
@@ -1527,7 +1527,9 @@ qlcnic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
  * firmware coalescing to default.
  */
 static int qlcnic_set_intr_coalesce(struct net_device *netdev,
-                       struct ethtool_coalesce *ethcoal)
+                                   struct ethtool_coalesce *ethcoal,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
        int err;
@@ -1551,7 +1553,9 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev,
 }
 
 static int qlcnic_get_intr_coalesce(struct net_device *netdev,
-                       struct ethtool_coalesce *ethcoal)
+                                   struct ethtool_coalesce *ethcoal,
+                                   struct kernel_ethtool_coalesce *kernel_coal,
+                                   struct netlink_ext_ack *extack)
 {
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
 
index 9ea59efd0fd669f5134370e0cc9d589b5215e39a..1225d27330f826a253113d373fad14fb94938c2b 100644 (file)
@@ -1749,7 +1749,10 @@ rtl_coalesce_info(struct rtl8169_private *tp)
        return ERR_PTR(-ELNRNG);
 }
 
-static int rtl_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
+static int rtl_get_coalesce(struct net_device *dev,
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct rtl8169_private *tp = netdev_priv(dev);
        const struct rtl_coalesce_info *ci;
@@ -1807,7 +1810,10 @@ static int rtl_coalesce_choose_scale(struct rtl8169_private *tp, u32 usec,
        return -ERANGE;
 }
 
-static int rtl_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
+static int rtl_set_coalesce(struct net_device *dev,
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct rtl8169_private *tp = netdev_priv(dev);
        u32 tx_fr = ec->tx_max_coalesced_frames;
index 7f8b10c4966073c13849ea51a5c5511a929aeb88..98edb01024f0be6cc791d68dd965966326dbcb63 100644 (file)
@@ -274,7 +274,9 @@ static u32 sxgbe_usec2riwt(u32 usec, struct sxgbe_priv_data *priv)
 }
 
 static int sxgbe_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 sxgbe_priv_data *priv = netdev_priv(dev);
 
@@ -285,7 +287,9 @@ static int sxgbe_get_coalesce(struct net_device *dev,
 }
 
 static int sxgbe_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 sxgbe_priv_data *priv = netdev_priv(dev);
        unsigned int rx_riwt;
index 058d9fe41d99d8bbff424e253926fec667b7470c..e002ce21788d5a52db0fe2a9fcb9912fb42e4a4b 100644 (file)
@@ -97,7 +97,9 @@ static void efx_ethtool_get_regs(struct net_device *net_dev,
  */
 
 static int efx_ethtool_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 efx_nic *efx = netdev_priv(net_dev);
        unsigned int tx_usecs, rx_usecs;
@@ -115,7 +117,9 @@ static int efx_ethtool_get_coalesce(struct net_device *net_dev,
 }
 
 static int efx_ethtool_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 efx_nic *efx = netdev_priv(net_dev);
        struct efx_channel *channel;
index a6bae6a234bac5e9d3a32934f2ab119ef81e502a..137e8a7aeaa17809df9cf8ca7104890ac7597c16 100644 (file)
@@ -577,7 +577,9 @@ static int ef4_ethtool_nway_reset(struct net_device *net_dev)
  */
 
 static int ef4_ethtool_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 ef4_nic *efx = netdev_priv(net_dev);
        unsigned int tx_usecs, rx_usecs;
@@ -595,7 +597,9 @@ static int ef4_ethtool_get_coalesce(struct net_device *net_dev,
 }
 
 static int ef4_ethtool_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 ef4_nic *efx = netdev_priv(net_dev);
        struct ef4_channel *channel;
index d15f7b3a3f101e8da716076d8313136b56c7ce41..1f46af136aa8cdadf5443b16bd8aa0520eaa81be 100644 (file)
@@ -532,7 +532,9 @@ static void netsec_et_get_drvinfo(struct net_device *net_device,
 }
 
 static int netsec_et_get_coalesce(struct net_device *net_device,
-                                 struct ethtool_coalesce *et_coalesce)
+                                 struct ethtool_coalesce *et_coalesce,
+                                 struct kernel_ethtool_coalesce *kernel_coal,
+                                 struct netlink_ext_ack *extack)
 {
        struct netsec_priv *priv = netdev_priv(net_device);
 
@@ -542,7 +544,9 @@ static int netsec_et_get_coalesce(struct net_device *net_device,
 }
 
 static int netsec_et_set_coalesce(struct net_device *net_device,
-                                 struct ethtool_coalesce *et_coalesce)
+                                 struct ethtool_coalesce *et_coalesce,
+                                 struct kernel_ethtool_coalesce *kernel_coal,
+                                 struct netlink_ext_ack *extack)
 {
        struct netsec_priv *priv = netdev_priv(net_device);
 
@@ -1544,7 +1548,7 @@ static int netsec_start_gmac(struct netsec_priv *priv)
        netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_CLR, ~0);
        netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_CLR, ~0);
 
-       netsec_et_set_coalesce(priv->ndev, &priv->et_coalesce);
+       netsec_et_set_coalesce(priv->ndev, &priv->et_coalesce, NULL, NULL);
 
        if (netsec_mac_write(priv, GMAC_REG_OMR, value))
                return -ETIMEDOUT;
index 595c3ccdcbb7331c24bc3bd50dc418af6591e91b..d89455803beda85bd4094e46e17bc40750ed933b 100644 (file)
@@ -874,7 +874,9 @@ static int __stmmac_get_coalesce(struct net_device *dev,
 }
 
 static int stmmac_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)
 {
        return __stmmac_get_coalesce(dev, ec, -1);
 }
@@ -958,7 +960,9 @@ static int __stmmac_set_coalesce(struct net_device *dev,
 }
 
 static int stmmac_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)
 {
        return __stmmac_set_coalesce(dev, ec, -1);
 }
index bc198eadfcab1889f4a4f1172e752e21b70fd811..49f8c6be9459ec6d1e1e8803fa1b3e03bfd79bc1 100644 (file)
@@ -146,8 +146,11 @@ static void xlgmac_ethtool_get_channels(struct net_device *netdev,
        channel->tx_count = pdata->tx_q_count;
 }
 
-static int xlgmac_ethtool_get_coalesce(struct net_device *netdev,
-                                      struct ethtool_coalesce *ec)
+static int
+xlgmac_ethtool_get_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct xlgmac_pdata *pdata = netdev_priv(netdev);
 
@@ -158,8 +161,11 @@ static int xlgmac_ethtool_get_coalesce(struct net_device *netdev,
        return 0;
 }
 
-static int xlgmac_ethtool_set_coalesce(struct net_device *netdev,
-                                      struct ethtool_coalesce *ec)
+static int
+xlgmac_ethtool_set_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ec,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct xlgmac_pdata *pdata = netdev_priv(netdev);
        struct xlgmac_hw_ops *hw_ops = &pdata->hw_ops;
index 8f6abaec41d1b3ee6e35bb982c191a31429d2cae..6b409f9c586395b64d28b6cf6109b2b3cbfd8c82 100644 (file)
@@ -2151,8 +2151,10 @@ bdx_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
  * @netdev
  * @ecoal
  */
-static int
-bdx_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
+static int bdx_get_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ecoal,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        u32 rdintcm;
        u32 tdintcm;
@@ -2180,8 +2182,10 @@ bdx_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
  * @netdev
  * @ecoal
  */
-static int
-bdx_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ecoal)
+static int bdx_set_coalesce(struct net_device *netdev,
+                           struct ethtool_coalesce *ecoal,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        u32 rdintcm;
        u32 tdintcm;
index 9f70e40779f6a75989bb2b453c0286e2872f0cb0..66f7ddd9b1f9940943b64c824b54049a46d9ed49 100644 (file)
@@ -845,7 +845,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
                struct ethtool_coalesce coal;
 
                coal.rx_coalesce_usecs = cpsw->coal_intvl;
-               cpsw_set_coalesce(ndev, &coal);
+               cpsw_set_coalesce(ndev, &coal, NULL, NULL);
        }
 
        cpdma_ctlr_start(cpsw->dma);
index 4619c3a950b01ef19f24e9283e80f5dc3d72b2d4..158c8d3793f43c5eddcb2dd84ea1c937349c0d4a 100644 (file)
@@ -152,7 +152,9 @@ void cpsw_set_msglevel(struct net_device *ndev, u32 value)
        priv->msg_enable = value;
 }
 
-int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
+int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack)
 {
        struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
 
@@ -160,7 +162,9 @@ int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
        return 0;
 }
 
-int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal)
+int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack)
 {
        struct cpsw_priv *priv = netdev_priv(ndev);
        u32 int_ctrl;
index 534d39f729e2c9e8d62ed7b33968ce678c7d72c0..7968f24d99c8550fea08dde45bb77f38b4e3ebaa 100644 (file)
@@ -894,7 +894,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
                struct ethtool_coalesce coal;
 
                coal.rx_coalesce_usecs = cpsw->coal_intvl;
-               cpsw_set_coalesce(ndev, &coal);
+               cpsw_set_coalesce(ndev, &coal, NULL, NULL);
        }
 
        cpdma_ctlr_start(cpsw->dma);
index 2951fb7b9dae785810c4607e7453fb9281eb157e..435668ee542d18131a41e96815db2c88a2fd9ee3 100644 (file)
@@ -464,8 +464,12 @@ void cpsw_mqprio_resume(struct cpsw_slave *slave, struct cpsw_priv *priv);
 /* ethtool */
 u32 cpsw_get_msglevel(struct net_device *ndev);
 void cpsw_set_msglevel(struct net_device *ndev, u32 value);
-int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
-int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal);
+int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack);
+int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
+                     struct kernel_ethtool_coalesce *kernel_coal,
+                     struct netlink_ext_ack *extack);
 int cpsw_get_sset_count(struct net_device *ndev, int sset);
 void cpsw_get_strings(struct net_device *ndev, u32 stringset, u8 *data);
 void cpsw_get_ethtool_stats(struct net_device *ndev,
index b1c5cbe7478b8250feafb73e8834a28c1463a496..e8291d8488391e2b4a6a382ab7c5a20f2f1df4ae 100644 (file)
@@ -383,12 +383,16 @@ static void emac_get_drvinfo(struct net_device *ndev,
  * emac_get_coalesce - Get interrupt coalesce settings for this device
  * @ndev : The DaVinci EMAC network adapter
  * @coal : ethtool coalesce settings structure
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack: extack for reporting error messages
  *
  * Fetch the current interrupt coalesce settings
  *
  */
 static int emac_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 emac_priv *priv = netdev_priv(ndev);
 
@@ -401,12 +405,16 @@ static int emac_get_coalesce(struct net_device *ndev,
  * emac_set_coalesce - Set interrupt coalesce settings for this device
  * @ndev : The DaVinci EMAC network adapter
  * @coal : ethtool coalesce settings structure
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack: extack for reporting error messages
  *
  * Set interrupt coalesce parameters
  *
  */
 static int emac_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 emac_priv *priv = netdev_priv(ndev);
        u32 int_ctrl, num_interrupts = 0;
@@ -1462,7 +1470,7 @@ static int emac_dev_open(struct net_device *ndev)
                struct ethtool_coalesce coal;
 
                coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
-               emac_set_coalesce(ndev, &coal);
+               emac_set_coalesce(ndev, &coal, NULL, NULL);
        }
 
        cpdma_ctlr_start(priv->dma);
index 6a08ea658816ae591016158beab2c6fbfeb51c0c..4b9c30f735b560f35a956d1fd6eb0f6dc4ab6cfc 100644 (file)
@@ -3518,7 +3518,9 @@ static void set_pending_timer_val(int *val, u32 us)
 
 
 static int velocity_get_coalesce(struct net_device *dev,
-               struct ethtool_coalesce *ecmd)
+                                struct ethtool_coalesce *ecmd,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct velocity_info *vptr = netdev_priv(dev);
 
@@ -3532,7 +3534,9 @@ static int velocity_get_coalesce(struct net_device *dev,
 }
 
 static int velocity_set_coalesce(struct net_device *dev,
-               struct ethtool_coalesce *ecmd)
+                                struct ethtool_coalesce *ecmd,
+                                struct kernel_ethtool_coalesce *kernel_coal,
+                                struct netlink_ext_ack *extack)
 {
        struct velocity_info *vptr = netdev_priv(dev);
        int max_us = 0x3f * 64;
index db1994fb51c54b2911005a357c67d0d010509e59..463094ced104ac3d90f567f0fca026156011f0b8 100644 (file)
@@ -1310,8 +1310,11 @@ static int ll_temac_ethtools_set_ringparam(struct net_device *ndev,
        return 0;
 }
 
-static int ll_temac_ethtools_get_coalesce(struct net_device *ndev,
-                                         struct ethtool_coalesce *ec)
+static int
+ll_temac_ethtools_get_coalesce(struct net_device *ndev,
+                              struct ethtool_coalesce *ec,
+                              struct kernel_ethtool_coalesce *kernel_coal,
+                              struct netlink_ext_ack *extack)
 {
        struct temac_local *lp = netdev_priv(ndev);
 
@@ -1322,8 +1325,11 @@ static int ll_temac_ethtools_get_coalesce(struct net_device *ndev,
        return 0;
 }
 
-static int ll_temac_ethtools_set_coalesce(struct net_device *ndev,
-                                         struct ethtool_coalesce *ec)
+static int
+ll_temac_ethtools_set_coalesce(struct net_device *ndev,
+                              struct ethtool_coalesce *ec,
+                              struct kernel_ethtool_coalesce *kernel_coal,
+                              struct netlink_ext_ack *extack)
 {
        struct temac_local *lp = netdev_priv(ndev);
 
index 348c0ba5edcf663e2e3c1ade572d76ce9656d438..871b5ec3183d6895f368247cf2bfb3e16cb2c92b 100644 (file)
@@ -1400,6 +1400,8 @@ axienet_ethtools_set_pauseparam(struct net_device *ndev,
  * axienet_ethtools_get_coalesce - Get DMA interrupt coalescing count.
  * @ndev:      Pointer to net_device structure
  * @ecoalesce: Pointer to ethtool_coalesce structure
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack:    extack for reporting error messages
  *
  * This implements ethtool command for getting the DMA interrupt coalescing
  * count on Tx and Rx paths. Issue "ethtool -c ethX" under linux prompt to
@@ -1407,8 +1409,11 @@ axienet_ethtools_set_pauseparam(struct net_device *ndev,
  *
  * Return: 0 always
  */
-static int axienet_ethtools_get_coalesce(struct net_device *ndev,
-                                        struct ethtool_coalesce *ecoalesce)
+static int
+axienet_ethtools_get_coalesce(struct net_device *ndev,
+                             struct ethtool_coalesce *ecoalesce,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        u32 regval = 0;
        struct axienet_local *lp = netdev_priv(ndev);
@@ -1425,6 +1430,8 @@ static int axienet_ethtools_get_coalesce(struct net_device *ndev,
  * axienet_ethtools_set_coalesce - Set DMA interrupt coalescing count.
  * @ndev:      Pointer to net_device structure
  * @ecoalesce: Pointer to ethtool_coalesce structure
+ * @kernel_coal: ethtool CQE mode setting structure
+ * @extack:    extack for reporting error messages
  *
  * This implements ethtool command for setting the DMA interrupt coalescing
  * count on Tx and Rx paths. Issue "ethtool -C ethX rx-frames 5" under linux
@@ -1432,8 +1439,11 @@ static int axienet_ethtools_get_coalesce(struct net_device *ndev,
  *
  * Return: 0, on success, Non-zero error value on failure.
  */
-static int axienet_ethtools_set_coalesce(struct net_device *ndev,
-                                        struct ethtool_coalesce *ecoalesce)
+static int
+axienet_ethtools_set_coalesce(struct net_device *ndev,
+                             struct ethtool_coalesce *ecoalesce,
+                             struct kernel_ethtool_coalesce *kernel_coal,
+                             struct netlink_ext_ack *extack)
 {
        struct axienet_local *lp = netdev_priv(ndev);
 
index c9ae52595a8f92be9bb1e5a4d68c3dcdba6a551a..b03a0513eb7e7bd7ce7b3407ab79bbb728f37197 100644 (file)
@@ -43,7 +43,9 @@ nsim_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
 }
 
 static int nsim_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 netdevsim *ns = netdev_priv(dev);
 
@@ -52,7 +54,9 @@ static int nsim_get_coalesce(struct net_device *dev,
 }
 
 static int nsim_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 netdevsim *ns = netdev_priv(dev);
 
index 2ced021f4faf60d31c2c327f0544cb2eed9d21cf..fecc9a1d293ae6c8a354f42e76ba58b2a57da871 100644 (file)
@@ -3510,7 +3510,9 @@ static void tun_set_msglevel(struct net_device *dev, u32 value)
 }
 
 static int tun_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 tun_struct *tun = netdev_priv(dev);
 
@@ -3520,7 +3522,9 @@ static int tun_get_coalesce(struct net_device *dev,
 }
 
 static int tun_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 tun_struct *tun = netdev_priv(dev);
 
index aa66671c484d307d9c8fc71bb9889e25f0317a9e..60ba9b734055ba3da6f36ac117021805a22a9edb 100644 (file)
@@ -8848,7 +8848,9 @@ out:
 }
 
 static int rtl8152_get_coalesce(struct net_device *netdev,
-                               struct ethtool_coalesce *coalesce)
+                               struct ethtool_coalesce *coalesce,
+                               struct kernel_ethtool_coalesce *kernel_coal,
+                               struct netlink_ext_ack *extack)
 {
        struct r8152 *tp = netdev_priv(netdev);
 
@@ -8867,7 +8869,9 @@ static int rtl8152_get_coalesce(struct net_device *netdev,
 }
 
 static int rtl8152_set_coalesce(struct net_device *netdev,
-                               struct ethtool_coalesce *coalesce)
+                               struct ethtool_coalesce *coalesce,
+                               struct kernel_ethtool_coalesce *kernel_coal,
+                               struct netlink_ext_ack *extack)
 {
        struct r8152 *tp = netdev_priv(netdev);
        int ret;
index c8c9ad7ca2b51d67bb6a18977959bb3f8e8c9172..b4ae2ac8a249cf3defcfe6ebcfe5c1c1f2bcbb7e 100644 (file)
@@ -2320,7 +2320,9 @@ static int virtnet_get_link_ksettings(struct net_device *dev,
 }
 
 static int virtnet_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 virtnet_info *vi = netdev_priv(dev);
        int i, napi_weight;
@@ -2341,7 +2343,9 @@ static int virtnet_set_coalesce(struct net_device *dev,
 }
 
 static int virtnet_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 ethtool_coalesce ec_default = {
                .cmd = ETHTOOL_GCOALESCE,
index a3e2f2ba68b561faa1850c9a49ac92df252b8c97..5dd8360b21a02cc75e88be64018e60da007ae213 100644 (file)
@@ -1053,8 +1053,10 @@ vmxnet3_set_rss(struct net_device *netdev, const u32 *p, const u8 *key,
 }
 #endif
 
-static int
-vmxnet3_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
+static int vmxnet3_get_coalesce(struct net_device *netdev,
+                               struct ethtool_coalesce *ec,
+                               struct kernel_ethtool_coalesce *kernel_coal,
+                               struct netlink_ext_ack *extack)
 {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
 
@@ -1088,8 +1090,10 @@ vmxnet3_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
        return 0;
 }
 
-static int
-vmxnet3_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec)
+static int vmxnet3_set_coalesce(struct net_device *netdev,
+                               struct ethtool_coalesce *ec,
+                               struct kernel_ethtool_coalesce *kernel_coal,
+                               struct netlink_ext_ack *extack)
 {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
        struct Vmxnet3_DriverShared *shared = adapter->shared;
index e481674485c2fa67443378d7005b682be5f62a87..29a9f17c2df09176293b9cf05116264c2129c643 100644 (file)
 
 #include "wil6210.h"
 
-static int wil_ethtoolops_get_coalesce(struct net_device *ndev,
-                                      struct ethtool_coalesce *cp)
+static int
+wil_ethtoolops_get_coalesce(struct net_device *ndev,
+                           struct ethtool_coalesce *cp,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct wil6210_priv *wil = ndev_to_wil(ndev);
        u32 tx_itr_en, tx_itr_val = 0;
@@ -45,8 +48,11 @@ out:
        return ret;
 }
 
-static int wil_ethtoolops_set_coalesce(struct net_device *ndev,
-                                      struct ethtool_coalesce *cp)
+static int
+wil_ethtoolops_set_coalesce(struct net_device *ndev,
+                           struct ethtool_coalesce *cp,
+                           struct kernel_ethtool_coalesce *kernel_coal,
+                           struct netlink_ext_ack *extack)
 {
        struct wil6210_priv *wil = ndev_to_wil(ndev);
        struct wireless_dev *wdev = ndev->ieee80211_ptr;
index 3937986f159afac0daffa0605167634db5ff85ef..46d0fe0d0e8a50062491125128a204a2097b7c6f 100644 (file)
@@ -123,7 +123,9 @@ static void __qeth_set_coalesce(struct net_device *dev,
 }
 
 static int qeth_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 qeth_card *card = dev->ml_priv;
        struct qeth_qdio_out_q *queue;
index 87d60115ac6732ff8b534c863df3b3395b53a862..12efcd1057baf0d3765e3bc000ecfe9ec3308f42 100644 (file)
@@ -621,7 +621,10 @@ static void qlge_get_regs(struct net_device *ndev,
                regs->len = sizeof(struct qlge_reg_dump);
 }
 
-static int qlge_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *c)
+static int qlge_get_coalesce(struct net_device *ndev,
+                            struct ethtool_coalesce *c,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct qlge_adapter *qdev = netdev_to_qdev(ndev);
 
@@ -644,7 +647,10 @@ static int qlge_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *c
        return 0;
 }
 
-static int qlge_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *c)
+static int qlge_set_coalesce(struct net_device *ndev,
+                            struct ethtool_coalesce *c,
+                            struct kernel_ethtool_coalesce *kernel_coal,
+                            struct netlink_ext_ack *extack)
 {
        struct qlge_adapter *qdev = netdev_to_qdev(ndev);
 
index a9d77a6a3e0074018f3b769d6538786d138d49f1..849524b55d89a66483f7fdfdf1401e753d5762dd 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <linux/bitmap.h>
 #include <linux/compat.h>
+#include <linux/netlink.h>
 #include <uapi/linux/ethtool.h>
 
 struct compat_ethtool_rx_flow_spec {
@@ -611,8 +612,14 @@ struct ethtool_ops {
                              struct ethtool_eeprom *, u8 *);
        int     (*set_eeprom)(struct net_device *,
                              struct ethtool_eeprom *, u8 *);
-       int     (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
-       int     (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
+       int     (*get_coalesce)(struct net_device *,
+                               struct ethtool_coalesce *,
+                               struct kernel_ethtool_coalesce *,
+                               struct netlink_ext_ack *);
+       int     (*set_coalesce)(struct net_device *,
+                               struct ethtool_coalesce *,
+                               struct kernel_ethtool_coalesce *,
+                               struct netlink_ext_ack *);
        void    (*get_ringparam)(struct net_device *,
                                 struct ethtool_ringparam *);
        int     (*set_ringparam)(struct net_device *,
index e6bc53634e68e9f680209c7947357d2e72db1cb7..46776ea42a92e1daf2982f06287b2227d9b045f7 100644 (file)
@@ -62,6 +62,7 @@ static int coalesce_prepare_data(const struct ethnl_req_info *req_base,
                                 struct genl_info *info)
 {
        struct coalesce_reply_data *data = COALESCE_REPDATA(reply_base);
+       struct netlink_ext_ack *extack = info ? info->extack : NULL;
        struct net_device *dev = reply_base->dev;
        int ret;
 
@@ -71,7 +72,8 @@ static int coalesce_prepare_data(const struct ethnl_req_info *req_base,
        ret = ethnl_ops_begin(dev);
        if (ret < 0)
                return ret;
-       ret = dev->ethtool_ops->get_coalesce(dev, &data->coalesce);
+       ret = dev->ethtool_ops->get_coalesce(dev, &data->coalesce,
+                                            &data->kernel_coalesce, extack);
        ethnl_ops_complete(dev);
 
        return ret;
@@ -266,7 +268,8 @@ int ethnl_set_coalesce(struct sk_buff *skb, struct genl_info *info)
        ret = ethnl_ops_begin(dev);
        if (ret < 0)
                goto out_rtnl;
-       ret = ops->get_coalesce(dev, &coalesce);
+       ret = ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
+                               info->extack);
        if (ret < 0)
                goto out_ops;
 
@@ -322,7 +325,8 @@ int ethnl_set_coalesce(struct sk_buff *skb, struct genl_info *info)
        if (!mod)
                goto out_ops;
 
-       ret = dev->ethtool_ops->set_coalesce(dev, &coalesce);
+       ret = dev->ethtool_ops->set_coalesce(dev, &coalesce, &kernel_coalesce,
+                                            info->extack);
        if (ret < 0)
                goto out_ops;
        ethtool_notify(dev, ETHTOOL_MSG_COALESCE_NTF, NULL);
index 81fa36a4c9c44d39d1afc03155496e93cb0c31ff..f2abc315288839fdb7a401d1d50e9c8d3e9cf991 100644 (file)
@@ -1619,12 +1619,14 @@ static noinline_for_stack int ethtool_get_coalesce(struct net_device *dev,
                                                   void __user *useraddr)
 {
        struct ethtool_coalesce coalesce = { .cmd = ETHTOOL_GCOALESCE };
+       struct kernel_ethtool_coalesce kernel_coalesce = {};
        int ret;
 
        if (!dev->ethtool_ops->get_coalesce)
                return -EOPNOTSUPP;
 
-       ret = dev->ethtool_ops->get_coalesce(dev, &coalesce);
+       ret = dev->ethtool_ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
+                                            NULL);
        if (ret)
                return ret;
 
@@ -1691,19 +1693,26 @@ ethtool_set_coalesce_supported(struct net_device *dev,
 static noinline_for_stack int ethtool_set_coalesce(struct net_device *dev,
                                                   void __user *useraddr)
 {
+       struct kernel_ethtool_coalesce kernel_coalesce = {};
        struct ethtool_coalesce coalesce;
        int ret;
 
-       if (!dev->ethtool_ops->set_coalesce)
+       if (!dev->ethtool_ops->set_coalesce && !dev->ethtool_ops->get_coalesce)
                return -EOPNOTSUPP;
 
+       ret = dev->ethtool_ops->get_coalesce(dev, &coalesce, &kernel_coalesce,
+                                            NULL);
+       if (ret)
+               return ret;
+
        if (copy_from_user(&coalesce, useraddr, sizeof(coalesce)))
                return -EFAULT;
 
        if (!ethtool_set_coalesce_supported(dev, &coalesce))
                return -EOPNOTSUPP;
 
-       ret = dev->ethtool_ops->set_coalesce(dev, &coalesce);
+       ret = dev->ethtool_ops->set_coalesce(dev, &coalesce, &kernel_coalesce,
+                                            NULL);
        if (!ret)
                ethtool_notify(dev, ETHTOOL_MSG_COALESCE_NTF, NULL);
        return ret;