Linuxarm
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- 1 participants
- 803 discussions
For the prototype of netdev_features_t is u64, and the number
of netdevice feature bits is 64 now. So there is no space to
introduce new feature bit.
This patchset try to solve it by change the prototype of
netdev_features_t from u64 to bitmap. With this change,
it's neccessary to introduce a set of bitmap operation
helpers for netdev features. Meanwhile, the functions
which use netdev_features_t as return value are also
need to be changed, return the result as an output
parameter.
With above changes, it will affect hundreds of files,
and all the nic drivers. To make it easy to be reviewed,
split the changes to 124 patches to 6 parts.
patch 1: code optimization for hns3 driver
patch 2~23: convert the prototype which use netdev_features_t
as return value
patch 24: introduce fake helpers for bitmap operation
patch 25~141: use netdev_feature_xxx helpers
patch 142: use macro __DECLARE_NETDEV_FEATURE_MASK to replace
netdev_feature_t declaration.
patch 143: change the type of netdev_features_t to bitmap,
and rewrite the bitmap helpers.
Jian Shen (143):
net: hns3: refine function hns3_set_default_feature()
net: convert the prototype of netdev_intersect_features
net: convert the prototype of netdev_get_wanted_features
net: convert the prototype of net_mpls_features
net: convert the prototype of harmonize_features
net: convert the prototype of gso_features_check
net: convert the prototype of vlan_features_check
net: convert the prototype of vxlan_features_check
net: convert the prototype of dflt_features_check
net: convert the prototype of ndo_features_check
net: convert the prototype of netif_skb_features
net: convert the prototype of ndo_fix_features
net: convert the prototype of netdev_fix_features
net: convert the prototype of netdev_sync_upper_features
net: convert the prototype of br_features_recompute
net: convert the prototype of netdev_add_tso_features
net: convert the prototype of netdev_increment_features
net: convert the prototype of hsr_features_recompute
net: mlx5: convert prototype of mlx5e_ipsec_feature_check,
mlx5e_tunnel_features_check and mlx5e_fix_uplink_rep_features
net: sfc: convert the prototype of xxx_supported_features
net: qlogic: convert the prototype of qlcnic_process_flags
net: realtek: convert the prototype of rtl8168evl_fix_tso
ethtool: convert the prototype of ethtool_get_feature_mask
net: add netdev feature helpers
net: core: use netdev feature helpers
skbuff: use netdev feature helpers
net: vlan: use netdev feature helpers
bridge: use netdev feature helpers
ipvlan: use netdev feature helpers
veth: use netdev feature helpers
bonding: use netdev feature helpers
net: tun: use netdev feature helpers
net: tap: use netdev feature helpers
net: geneve: use netdev feature helpers
hv_netvsc: use netdev feature helpers
macvlan: use netdev feature helpers
macsec: use netdev feature helpers
s390: qeth: use netdev feature helpers
dsa: use netdev feature helpers
macvtap: use netdev feature helpers
team: use netdev feature helpers
vmxnet3: use netdev feature helpers
net_failover: use netdev feature helpers
pktgen: use netdev feature helpers
net: sched: use netdev feature helpers
netdevsim: use netdev feature helpers
virtio_net: use netdev feature helpers
net: ipv4: use netdev feature helpers
net: ipv6: use netdev feature helpers
net: hsr: use netdev feature helpers
net: nsh: use netdev feature helpers
vxlan: use netdev feature helpers
xen-netback: use netdev feature helpers
xen-netfront: use netdev feature helpers
sock: use netdev feature helpers
sunrpc: use netdev feature helpers
net: loopback: use netdev feature helpers
net: dummy: use netdev_feature helpers
net: mac80211: use netdev feature helpers
net: ifb: use netdev feature helpers
net: bareudp: use netdev feature helpers
net: gtp: use netdev feature helpers
net: nlmon: use netdev feature helpers
net: wireguard: use netdev feature helpers
net: can: use netdev feature helpers
net: ppp: use netdev feature helpers
net: ipa: use netdev feature helpers
net: fjes: use netdev feature helpers
net: usb: use netdev feature helpers
net: wireless: use netdev feature helpers
net: realtek: use netdev feature helpers
net: broadcom: use netdev feature helpers
net: intel: use netdev feature helpers
net: hisilicon: use netdev feature helpers
net: mellanox: use netdev feature helpers
net: atlantic: use netdev feature helpers
net: atheros: use netdev feature helpers
net: chelsio: use netdev feature helpers
net: davicom: use netdev feature helpers
net: freescale: use netdev feature helpers
net: synopsys: use netdev feature helpers
net: sfc: use netdev feature helpers
net: qualcomm: use netdev feature helpers
net: nvidia: use netdev feature helpers
net: faraday: use netdev feature helpers
net: google: use netdev feature helpers
net: hinic: use netdev feature helpers
net: ibm: use netdev feature helpers
net: ionic: use netdev feature helpers
net: jme: use netdev feature helpers
net: micrel: use netdev feature helpers
net: cavium: use netdev feature helpers
net: cadence: use netdev feature helpers
net: mediatek: use netdev feature helpers
net: marvell: use netdev feature helpers
net: socionext: use netdev feature helpers
net: qlogic: use netdev feature helpers
net: nfp: use netdev feature helpers
net: mscc: use netdev feature helpers
net: oki-semi: use netdev feature helpers
net: renesas: use netdev feature helpers
net: neterion: use netdev feature helpers
net: cortina: use netdev feature helpers
net: stmmac: use netdev feature helpers
net: sxgbe: use netdev feature helpers
net: xgmac: use netdev feature helpers
net: altera: use netdev feature helpers
net: ti: use netdev feature helpers
net: benet: use netdev feature helpers
net: amd: use netdev feature helpers
net: bna: use netdev feature helpers
net: enic: use netdev feature helpers
net: 3com: use netdev feature helpers
net: aeroflex: use netdev feature helpers
net: sun: use netdev feature helpers
net: mana: use netdev feature helpers
net: myricom: use netdev feature helpers
net: alacritech: use netdev feature helpers
net: toshiba: use netdev feature helpers
net: tehuti: use netdev feature helpers
net: alteon: use netdev feature helpers
net: ena: use netdev feature helpers
net: sgi: use netdev feature helpers
net: microchip: use netdev feature helpers
net: ni: use netdev feature helpers
net: apm: use netdev feature helpers
net: natsemi: use netdev feature helpers
net: xilinx: use netdev feature helpers
net: pasemi: use netdev feature helpers
net: rocker: use netdev feature helpers
net: silan: use netdev feature helpers
net: adaptec: use netdev feature helpers
net: tundra: use netdev feature helpers
net: via: use netdev feature helpers
net: wiznet: use netdev feature helpers
net: dnet: use netdev feature helpers
net: ethoc: use netdev feature helpers
RDMA: ipoib: use netdev feature helpers
um: use netdev feature helpers
staging: qlge: use netdev feature helpers
net: sock: add helper sk_nocaps_add_gso()
treewide: introduce macro __DECLARE_NETDEV_FEATURE_MASK
net: extend the type of netdev_features_t to bitmap
arch/um/drivers/vector_kern.c | 15 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 21 +-
drivers/net/bareudp.c | 16 +-
drivers/net/bonding/bond_main.c | 137 ++++---
drivers/net/bonding/bond_options.c | 12 +-
drivers/net/can/dev/dev.c | 3 +-
drivers/net/can/slcan.c | 3 +-
drivers/net/dsa/xrs700x/xrs700x.c | 6 +-
drivers/net/dummy.c | 14 +-
drivers/net/ethernet/3com/3c59x.c | 9 +-
drivers/net/ethernet/3com/typhoon.c | 10 +-
drivers/net/ethernet/adaptec/starfire.c | 9 +-
drivers/net/ethernet/aeroflex/greth.c | 12 +-
drivers/net/ethernet/alacritech/slicoss.c | 5 +-
drivers/net/ethernet/alteon/acenic.c | 7 +-
drivers/net/ethernet/altera/altera_tse_main.c | 11 +-
drivers/net/ethernet/amazon/ena/ena_admin_defs.h | 2 +-
drivers/net/ethernet/amazon/ena/ena_netdev.c | 50 +--
drivers/net/ethernet/amd/amd8111e.c | 8 +-
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 20 +-
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 93 +++--
drivers/net/ethernet/amd/xgbe/xgbe-main.c | 68 ++--
drivers/net/ethernet/amd/xgbe/xgbe.h | 2 +-
drivers/net/ethernet/apm/xgene-v2/main.c | 5 +-
drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 21 +-
.../net/ethernet/aquantia/atlantic/aq_filters.c | 12 +-
drivers/net/ethernet/aquantia/atlantic/aq_macsec.c | 2 +-
drivers/net/ethernet/aquantia/atlantic/aq_main.c | 27 +-
drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 28 +-
drivers/net/ethernet/aquantia/atlantic/aq_nic.h | 2 +-
drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 3 +-
.../ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 3 +-
drivers/net/ethernet/atheros/alx/main.c | 23 +-
drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 33 +-
drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 44 ++-
drivers/net/ethernet/atheros/atlx/atl1.c | 15 +-
drivers/net/ethernet/atheros/atlx/atl2.c | 27 +-
drivers/net/ethernet/atheros/atlx/atlx.c | 20 +-
drivers/net/ethernet/broadcom/b44.c | 2 +-
drivers/net/ethernet/broadcom/bcmsysport.c | 24 +-
drivers/net/ethernet/broadcom/bgmac.c | 8 +-
drivers/net/ethernet/broadcom/bnx2.c | 48 ++-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 67 ++--
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 3 +-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 93 +++--
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 171 +++++----
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 4 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c | 11 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 3 +-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 12 +-
drivers/net/ethernet/broadcom/tg3.c | 62 +--
drivers/net/ethernet/brocade/bna/bnad.c | 48 ++-
drivers/net/ethernet/cadence/macb_main.c | 81 ++--
drivers/net/ethernet/calxeda/xgmac.c | 20 +-
drivers/net/ethernet/cavium/liquidio/lio_core.c | 6 +-
drivers/net/ethernet/cavium/liquidio/lio_main.c | 95 +++--
drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 79 ++--
drivers/net/ethernet/cavium/thunder/nicvf_main.c | 50 +--
drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 2 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 50 +--
drivers/net/ethernet/chelsio/cxgb/sge.c | 12 +-
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 60 +--
drivers/net/ethernet/chelsio/cxgb3/sge.c | 10 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c | 16 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 88 +++--
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.h | 3 +-
drivers/net/ethernet/chelsio/cxgb4/sge.c | 14 +-
.../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 39 +-
drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 8 +-
.../chelsio/inline_crypto/chtls/chtls_main.c | 3 +-
drivers/net/ethernet/cisco/enic/enic_main.c | 74 ++--
drivers/net/ethernet/cortina/gemini.c | 18 +-
drivers/net/ethernet/davicom/dm9000.c | 24 +-
drivers/net/ethernet/dnet.c | 2 +-
drivers/net/ethernet/emulex/benet/be_main.c | 68 ++--
drivers/net/ethernet/ethoc.c | 2 +-
drivers/net/ethernet/faraday/ftgmac100.c | 38 +-
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 23 +-
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 44 ++-
.../net/ethernet/freescale/dpaa2/dpaa2-switch.c | 5 +-
drivers/net/ethernet/freescale/enetc/enetc.c | 34 +-
drivers/net/ethernet/freescale/enetc/enetc_pf.c | 38 +-
drivers/net/ethernet/freescale/enetc/enetc_qos.c | 2 +-
drivers/net/ethernet/freescale/enetc/enetc_vf.c | 16 +-
drivers/net/ethernet/freescale/fec_main.c | 29 +-
.../net/ethernet/freescale/fs_enet/fs_enet-main.c | 2 +-
drivers/net/ethernet/freescale/gianfar.c | 39 +-
drivers/net/ethernet/freescale/gianfar_ethtool.c | 11 +-
drivers/net/ethernet/google/gve/gve_adminq.c | 6 +-
drivers/net/ethernet/google/gve/gve_main.c | 31 +-
drivers/net/ethernet/google/gve/gve_rx.c | 8 +-
drivers/net/ethernet/google/gve/gve_rx_dqo.c | 8 +-
drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 8 +-
drivers/net/ethernet/hisilicon/hns/hns_enet.c | 52 +--
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 159 ++++----
drivers/net/ethernet/huawei/hinic/hinic_main.c | 80 ++--
drivers/net/ethernet/huawei/hinic/hinic_rx.c | 5 +-
drivers/net/ethernet/ibm/ehea/ehea_main.c | 22 +-
drivers/net/ethernet/ibm/emac/core.c | 7 +-
drivers/net/ethernet/ibm/ibmveth.c | 76 ++--
drivers/net/ethernet/ibm/ibmvnic.c | 67 ++--
drivers/net/ethernet/intel/e100.c | 26 +-
drivers/net/ethernet/intel/e1000/e1000_main.c | 82 ++--
drivers/net/ethernet/intel/e1000e/netdev.c | 129 ++++---
drivers/net/ethernet/intel/fm10k/fm10k_main.c | 9 +-
drivers/net/ethernet/intel/fm10k/fm10k_netdev.c | 65 ++--
drivers/net/ethernet/intel/fm10k/fm10k_pci.c | 11 +-
drivers/net/ethernet/intel/i40e/i40e_main.c | 122 +++---
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 9 +-
drivers/net/ethernet/intel/iavf/iavf_main.c | 153 ++++----
drivers/net/ethernet/intel/iavf/iavf_txrx.c | 12 +-
drivers/net/ethernet/intel/ice/ice_main.c | 177 +++++----
drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 9 +-
drivers/net/ethernet/intel/igb/igb_ethtool.c | 2 +-
drivers/net/ethernet/intel/igb/igb_main.c | 150 +++++---
drivers/net/ethernet/intel/igbvf/netdev.c | 86 +++--
drivers/net/ethernet/intel/igc/igc_ethtool.c | 3 +-
drivers/net/ethernet/intel/igc/igc_main.c | 122 +++---
drivers/net/ethernet/intel/ixgb/ixgb_main.c | 49 ++-
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 3 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 7 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 3 +-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 215 ++++++-----
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 6 +-
drivers/net/ethernet/intel/ixgbevf/ipsec.c | 9 +-
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 105 +++---
drivers/net/ethernet/jme.c | 49 +--
drivers/net/ethernet/marvell/mv643xx_eth.c | 14 +-
drivers/net/ethernet/marvell/mvneta.c | 22 +-
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 73 ++--
.../ethernet/marvell/octeontx2/nic/otx2_common.c | 3 +-
.../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 2 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 74 ++--
.../net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 8 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_vf.c | 22 +-
.../net/ethernet/marvell/prestera/prestera_main.c | 3 +-
drivers/net/ethernet/marvell/skge.c | 11 +-
drivers/net/ethernet/marvell/sky2.c | 75 ++--
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 56 +--
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_main.c | 8 +-
drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 198 ++++++----
drivers/net/ethernet/mellanox/mlx4/en_resources.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 19 +-
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 5 +-
drivers/net/ethernet/mellanox/mlx5/core/en.h | 5 +-
.../ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 18 +-
.../mellanox/mlx5/core/en_accel/ipsec_rxtx.h | 15 +-
.../ethernet/mellanox/mlx5/core/en_accel/ktls.c | 14 +-
.../net/ethernet/mellanox/mlx5/core/en_accel/tls.c | 16 +-
drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c | 6 +-
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 3 +-
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 3 +-
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 250 ++++++------
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 25 +-
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 9 +-
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 2 +-
.../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 19 +-
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 36 +-
drivers/net/ethernet/micrel/ksz884x.c | 10 +-
drivers/net/ethernet/microchip/lan743x_main.c | 7 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 20 +-
drivers/net/ethernet/mscc/ocelot.c | 3 +-
drivers/net/ethernet/mscc/ocelot_net.c | 18 +-
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 31 +-
drivers/net/ethernet/natsemi/ns83820.c | 13 +-
drivers/net/ethernet/neterion/s2io.c | 32 +-
drivers/net/ethernet/neterion/vxge/vxge-main.c | 49 ++-
drivers/net/ethernet/netronome/nfp/crypto/tls.c | 12 +-
.../net/ethernet/netronome/nfp/nfp_net_common.c | 117 +++---
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 76 ++--
drivers/net/ethernet/netronome/nfp/nfp_port.c | 3 +-
drivers/net/ethernet/ni/nixge.c | 3 +-
drivers/net/ethernet/nvidia/forcedeth.c | 66 ++--
.../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 13 +-
.../net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 6 +-
drivers/net/ethernet/pasemi/pasemi_mac.c | 6 +-
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 125 +++---
drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 9 +-
.../net/ethernet/qlogic/netxen/netxen_nic_init.c | 3 +-
.../net/ethernet/qlogic/netxen/netxen_nic_main.c | 50 +--
drivers/net/ethernet/qlogic/qede/qede.h | 10 +-
drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 2 +-
drivers/net/ethernet/qlogic/qede/qede_filter.c | 19 +-
drivers/net/ethernet/qlogic/qede/qede_fp.c | 23 +-
drivers/net/ethernet/qlogic/qede/qede_main.c | 67 ++--
drivers/net/ethernet/qlogic/qla3xxx.c | 5 +-
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 3 +-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 72 ++--
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 3 +-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 57 +--
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 6 +-
drivers/net/ethernet/qualcomm/emac/emac.c | 25 +-
.../net/ethernet/qualcomm/rmnet/rmnet_map_data.c | 11 +-
drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c | 10 +-
drivers/net/ethernet/realtek/8139cp.c | 36 +-
drivers/net/ethernet/realtek/8139too.c | 28 +-
drivers/net/ethernet/realtek/r8169_main.c | 85 +++--
drivers/net/ethernet/renesas/ravb_main.c | 24 +-
drivers/net/ethernet/renesas/sh_eth.c | 28 +-
drivers/net/ethernet/rocker/rocker_main.c | 3 +-
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 19 +-
drivers/net/ethernet/sfc/ef10.c | 37 +-
drivers/net/ethernet/sfc/ef100_nic.c | 39 +-
drivers/net/ethernet/sfc/ef100_rx.c | 6 +-
drivers/net/ethernet/sfc/ef100_tx.c | 11 +-
drivers/net/ethernet/sfc/ef10_sriov.c | 6 +-
drivers/net/ethernet/sfc/efx.c | 30 +-
drivers/net/ethernet/sfc/efx_common.c | 41 +-
drivers/net/ethernet/sfc/efx_common.h | 4 +-
drivers/net/ethernet/sfc/falcon/efx.c | 43 ++-
drivers/net/ethernet/sfc/falcon/net_driver.h | 9 +-
drivers/net/ethernet/sfc/falcon/rx.c | 6 +-
drivers/net/ethernet/sfc/farch.c | 2 +-
drivers/net/ethernet/sfc/mcdi_filters.c | 21 +-
drivers/net/ethernet/sfc/mcdi_port_common.c | 3 +-
drivers/net/ethernet/sfc/net_driver.h | 9 +-
drivers/net/ethernet/sfc/rx.c | 3 +-
drivers/net/ethernet/sfc/rx_common.c | 3 +-
drivers/net/ethernet/sgi/ioc3-eth.c | 11 +-
drivers/net/ethernet/silan/sc92031.c | 6 +-
drivers/net/ethernet/socionext/netsec.c | 10 +-
drivers/net/ethernet/socionext/sni_ave.c | 6 +-
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 3 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 62 +--
.../net/ethernet/stmicro/stmmac/stmmac_selftests.c | 6 +-
drivers/net/ethernet/sun/cassini.c | 5 +-
drivers/net/ethernet/sun/ldmvsw.c | 5 +-
drivers/net/ethernet/sun/niu.c | 11 +-
drivers/net/ethernet/sun/sungem.c | 11 +-
drivers/net/ethernet/sun/sunhme.c | 14 +-
drivers/net/ethernet/sun/sunvnet.c | 8 +-
drivers/net/ethernet/sun/sunvnet_common.c | 5 +-
drivers/net/ethernet/synopsys/dwc-xlgmac-common.c | 45 ++-
drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c | 20 +-
drivers/net/ethernet/synopsys/dwc-xlgmac-net.c | 41 +-
drivers/net/ethernet/synopsys/dwc-xlgmac.h | 2 +-
drivers/net/ethernet/tehuti/tehuti.c | 22 +-
drivers/net/ethernet/ti/am65-cpsw-nuss.c | 23 +-
drivers/net/ethernet/ti/cpsw.c | 6 +-
drivers/net/ethernet/ti/cpsw_new.c | 7 +-
drivers/net/ethernet/ti/netcp_core.c | 9 +-
drivers/net/ethernet/toshiba/ps3_gelic_net.c | 14 +-
drivers/net/ethernet/toshiba/spider_net.c | 12 +-
drivers/net/ethernet/tundra/tsi108_eth.c | 3 +-
drivers/net/ethernet/via/via-rhine.c | 10 +-
drivers/net/ethernet/via/via-velocity.c | 14 +-
drivers/net/ethernet/wiznet/w5100.c | 2 +-
drivers/net/ethernet/wiznet/w5300.c | 2 +-
drivers/net/ethernet/xilinx/ll_temac_main.c | 5 +-
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 9 +-
drivers/net/fjes/fjes_main.c | 3 +-
drivers/net/geneve.c | 18 +-
drivers/net/gtp.c | 2 +-
drivers/net/hyperv/netvsc_bpf.c | 2 +-
drivers/net/hyperv/netvsc_drv.c | 46 +--
drivers/net/hyperv/rndis_filter.c | 30 +-
drivers/net/ifb.c | 12 +-
drivers/net/ipa/ipa_modem.c | 3 +-
drivers/net/ipvlan/ipvlan.h | 2 +-
drivers/net/ipvlan/ipvlan_main.c | 40 +-
drivers/net/ipvlan/ipvtap.c | 4 +-
drivers/net/loopback.c | 20 +-
drivers/net/macsec.c | 49 ++-
drivers/net/macvlan.c | 58 +--
drivers/net/macvtap.c | 5 +-
drivers/net/net_failover.c | 77 ++--
drivers/net/netdevsim/ipsec.c | 4 +-
drivers/net/netdevsim/netdev.c | 15 +-
drivers/net/nlmon.c | 5 +-
drivers/net/ppp/ppp_generic.c | 2 +-
drivers/net/tap.c | 38 +-
drivers/net/team/team.c | 90 +++--
drivers/net/tun.c | 53 ++-
drivers/net/usb/aqc111.c | 42 ++-
drivers/net/usb/ax88179_178a.c | 26 +-
drivers/net/usb/cdc-phonet.c | 2 +-
drivers/net/usb/cdc_mbim.c | 4 +-
drivers/net/usb/lan78xx.c | 46 +--
drivers/net/usb/r8152.c | 71 ++--
drivers/net/usb/smsc75xx.c | 14 +-
drivers/net/usb/smsc95xx.c | 18 +-
drivers/net/veth.c | 67 ++--
drivers/net/virtio_net.c | 51 ++-
drivers/net/vmxnet3/vmxnet3_drv.c | 78 ++--
drivers/net/vmxnet3/vmxnet3_ethtool.c | 88 +++--
drivers/net/vmxnet3/vmxnet3_int.h | 4 +-
drivers/net/vxlan.c | 21 +-
drivers/net/wireguard/device.c | 8 +-
drivers/net/wireless/ath/ath10k/mac.c | 7 +-
drivers/net/wireless/ath/ath11k/mac.c | 4 +-
drivers/net/wireless/ath/ath6kl/main.c | 15 +-
drivers/net/wireless/ath/ath6kl/txrx.c | 6 +-
drivers/net/wireless/ath/wil6210/netdev.c | 11 +-
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 4 +-
drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | 7 +-
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 17 +-
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 3 +-
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 8 +-
drivers/net/wireless/mediatek/mt76/mt7615/init.c | 3 +-
drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 +-
drivers/net/wireless/mediatek/mt76/mt7921/init.c | 3 +-
drivers/net/xen-netback/interface.c | 27 +-
drivers/net/xen-netfront.c | 52 +--
drivers/s390/net/qeth_core.h | 7 +-
drivers/s390/net/qeth_core_main.c | 129 ++++---
drivers/s390/net/qeth_l2_main.c | 44 ++-
drivers/s390/net/qeth_l3_main.c | 49 ++-
drivers/staging/qlge/qlge_main.c | 59 +--
include/linux/if_macvlan.h | 2 +-
include/linux/if_tap.h | 2 +-
include/linux/if_vlan.h | 22 +-
include/linux/netdev_features.h | 179 +++++++--
include/linux/netdevice.h | 122 +++---
include/linux/skbuff.h | 6 +-
include/net/mac80211.h | 2 +-
include/net/pkt_cls.h | 2 +-
include/net/sock.h | 22 +-
include/net/udp.h | 8 +-
include/net/udp_tunnel.h | 12 +-
include/net/vxlan.h | 13 +-
lib/test_bpf.c | 2 +-
lib/vsprintf.c | 4 +-
net/8021q/vlan.c | 11 +-
net/8021q/vlan.h | 22 +-
net/8021q/vlan_core.c | 6 +-
net/8021q/vlan_dev.c | 57 +--
net/bridge/br_device.c | 21 +-
net/bridge/br_if.c | 19 +-
net/bridge/br_private.h | 3 +-
net/core/dev.c | 418 ++++++++++++---------
net/core/netpoll.c | 4 +-
net/core/pktgen.c | 6 +-
net/core/skbuff.c | 10 +-
net/core/skmsg.c | 3 +-
net/core/sock.c | 17 +-
net/dsa/slave.c | 15 +-
net/ethtool/features.c | 94 ++---
net/ethtool/ioctl.c | 154 +++++---
net/hsr/hsr_device.c | 40 +-
net/ipv4/af_inet.c | 5 +-
net/ipv4/esp4_offload.c | 29 +-
net/ipv4/gre_offload.c | 8 +-
net/ipv4/ip_gre.c | 36 +-
net/ipv4/ip_output.c | 27 +-
net/ipv4/ip_tunnel.c | 4 +-
net/ipv4/ip_vti.c | 2 +-
net/ipv4/ipip.c | 6 +-
net/ipv4/ipmr.c | 2 +-
net/ipv4/tcp.c | 10 +-
net/ipv4/tcp_ipv4.c | 6 +-
net/ipv4/tcp_offload.c | 5 +-
net/ipv4/tcp_output.c | 2 +-
net/ipv4/udp_offload.c | 28 +-
net/ipv6/af_inet6.c | 2 +-
net/ipv6/esp6_offload.c | 19 +-
net/ipv6/inet6_connection_sock.c | 2 +-
net/ipv6/ip6_gre.c | 17 +-
net/ipv6/ip6_offload.c | 3 +-
net/ipv6/ip6_output.c | 24 +-
net/ipv6/ip6_tunnel.c | 9 +-
net/ipv6/ip6mr.c | 2 +-
net/ipv6/sit.c | 9 +-
net/ipv6/tcp_ipv6.c | 2 +-
net/ipv6/udp_offload.c | 2 +-
net/mac80211/iface.c | 10 +-
net/mac80211/main.c | 5 +-
net/nsh/nsh.c | 2 +-
net/sched/sch_cake.c | 4 +-
net/sched/sch_netem.c | 6 +-
net/sched/sch_taprio.c | 6 +-
net/sched/sch_tbf.c | 6 +-
net/sunrpc/sunrpc.h | 2 +-
net/wireless/core.c | 14 +-
378 files changed, 6367 insertions(+), 4344 deletions(-)
--
2.8.1
3
158

18 Aug '21
在 2021/8/11 22:46, Jian Shen 写道:
> Use netdev_feature_xxx helpers to replace the logical operation
> for netdev features.
>
> Signed-off-by: Jian Shen <shenjian15(a)huawei.com>
> ---
> drivers/net/ethernet/sun/cassini.c | 5 +++--
> drivers/net/ethernet/sun/ldmvsw.c | 5 +++--
> drivers/net/ethernet/sun/niu.c | 11 +++++++----
> drivers/net/ethernet/sun/sungem.c | 11 +++++++----
> drivers/net/ethernet/sun/sunhme.c | 14 ++++++++++----
> drivers/net/ethernet/sun/sunvnet.c | 8 +++++---
> drivers/net/ethernet/sun/sunvnet_common.c | 5 ++++-
> 7 files changed, 39 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c
> index 287ae4c..785e11f 100644
> --- a/drivers/net/ethernet/sun/cassini.c
> +++ b/drivers/net/ethernet/sun/cassini.c
> @@ -5084,10 +5084,11 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
>
> /* Cassini features. */
> if ((cp->cas_flags & CAS_FLAG_NO_HW_CSUM) == 0)
> - dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG;
> + netdev_feature_set_bits(NETIF_F_HW_CSUM | NETIF_F_SG,
> + &dev->features);
>
> if (pci_using_dac)
> - dev->features |= NETIF_F_HIGHDMA;
> + netdev_feature_set_bit(NETIF_F_HIGHDMA_BIT, &dev->features);
>
> /* MTU range: 60 - varies or 9000 */
> dev->min_mtu = CAS_MIN_MTU;
> diff --git a/drivers/net/ethernet/sun/ldmvsw.c b/drivers/net/ethernet/sun/ldmvsw.c
> index 50bd4e3..7c32d54 100644
> --- a/drivers/net/ethernet/sun/ldmvsw.c
> +++ b/drivers/net/ethernet/sun/ldmvsw.c
> @@ -249,8 +249,9 @@ static struct net_device *vsw_alloc_netdev(u8 hwaddr[],
> dev->ethtool_ops = &vsw_ethtool_ops;
> dev->watchdog_timeo = VSW_TX_TIMEOUT;
>
> - dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG;
> - dev->features = dev->hw_features;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_HW_CSUM | NETIF_F_SG, &dev->features);
it should be "dev->hw_features", not "dev->features"
> + netdev_feature_copy(&dev->features, dev->hw_features);
>
> /* MTU range: 68 - 65535 */
> dev->min_mtu = ETH_MIN_MTU;
> diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
> index 1501e890..97f62ec 100644
> --- a/drivers/net/ethernet/sun/niu.c
> +++ b/drivers/net/ethernet/sun/niu.c
> @@ -3472,7 +3472,7 @@ static int niu_process_rx_pkt(struct napi_struct *napi, struct niu *np,
> __pskb_pull_tail(skb, len);
>
> rh = (struct rx_pkt_hdr1 *) skb->data;
> - if (np->dev->features & NETIF_F_RXHASH)
> + if (netdev_feature_test_bit(NETIF_F_RXHASH_BIT, np->dev->features))
> skb_set_hash(skb,
> ((u32)rh->hashval2_0 << 24 |
> (u32)rh->hashval2_1 << 16 |
> @@ -9711,8 +9711,11 @@ static void niu_device_announce(struct niu *np)
>
> static void niu_set_basic_features(struct net_device *dev)
> {
> - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXHASH;
> - dev->features |= dev->hw_features | NETIF_F_RXCSUM;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXHASH,
> + &dev->hw_features);
> + netdev_feature_or(&dev->features, dev->features, dev->hw_features);
> + netdev_feature_set_bit(NETIF_F_RXCSUM_BIT, &dev->features);
> }
>
> static int niu_pci_init_one(struct pci_dev *pdev,
> @@ -9780,7 +9783,7 @@ static int niu_pci_init_one(struct pci_dev *pdev,
> dma_mask = DMA_BIT_MASK(44);
> err = pci_set_dma_mask(pdev, dma_mask);
> if (!err) {
> - dev->features |= NETIF_F_HIGHDMA;
> + netdev_feature_set_bit(NETIF_F_HIGHDMA_BIT, &dev->features);
> err = pci_set_consistent_dma_mask(pdev, dma_mask);
> if (err) {
> dev_err(&pdev->dev, "Unable to obtain 44 bit DMA for consistent allocations, aborting\n");
> diff --git a/drivers/net/ethernet/sun/sungem.c b/drivers/net/ethernet/sun/sungem.c
> index d72018a..79b2435 100644
> --- a/drivers/net/ethernet/sun/sungem.c
> +++ b/drivers/net/ethernet/sun/sungem.c
> @@ -843,7 +843,8 @@ static int gem_rx(struct gem *gp, int work_to_do)
> skb = copy_skb;
> }
>
> - if (likely(dev->features & NETIF_F_RXCSUM)) {
> + if (likely(netdev_feature_test_bit(NETIF_F_RXCSUM_BIT,
> + dev->features))) {
> __sum16 csum;
>
> csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
> @@ -2987,10 +2988,12 @@ static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> pci_set_drvdata(pdev, dev);
>
> /* We can do scatter/gather and HW checksum */
> - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
> - dev->features = dev->hw_features;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM,
> + &dev->hw_features);
> + netdev_feature_copy(&dev->features, dev->hw_features);
> if (pci_using_dac)
> - dev->features |= NETIF_F_HIGHDMA;
> + netdev_feature_set_bit(NETIF_F_HIGHDMA_BIT, &dev->features);
>
> /* MTU range: 68 - 1500 (Jumbo mode is broken) */
> dev->min_mtu = GEM_MIN_MTU;
> diff --git a/drivers/net/ethernet/sun/sunhme.c b/drivers/net/ethernet/sun/sunhme.c
> index a2c1a40..22de1ad 100644
> --- a/drivers/net/ethernet/sun/sunhme.c
> +++ b/drivers/net/ethernet/sun/sunhme.c
> @@ -2825,8 +2825,11 @@ static int happy_meal_sbus_probe_one(struct platform_device *op, int is_qfe)
> dev->ethtool_ops = &hme_ethtool_ops;
>
> /* Happy Meal can do it all... */
> - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM;
> - dev->features |= dev->hw_features | NETIF_F_RXCSUM;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_SG | NETIF_F_HW_CSUM,
> + &dev->hw_features);
> + netdev_feature_or(&dev->features, dev->features, dev->hw_features);
> + netdev_feature_set_bit(NETIF_F_RXCSUM_BIT, &dev->features);
>
> hp->irq = op->archdata.irqs[0];
>
> @@ -3140,8 +3143,11 @@ static int happy_meal_pci_probe(struct pci_dev *pdev,
> dev->ethtool_ops = &hme_ethtool_ops;
>
> /* Happy Meal can do it all... */
> - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM;
> - dev->features |= dev->hw_features | NETIF_F_RXCSUM;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_SG | NETIF_F_HW_CSUM,
> + &dev->hw_features);
> + netdev_feature_or(&dev->features, dev->features, dev->hw_features);
> + netdev_feature_set_bit(NETIF_F_RXCSUM_BIT, &dev->features);
>
> #if defined(CONFIG_SBUS) && defined(CONFIG_PCI)
> /* Hook up PCI register/descriptor accessors. */
> diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
> index 58ee892..1c5c858 100644
> --- a/drivers/net/ethernet/sun/sunvnet.c
> +++ b/drivers/net/ethernet/sun/sunvnet.c
> @@ -312,9 +312,11 @@ static struct vnet *vnet_new(const u64 *local_mac,
> dev->ethtool_ops = &vnet_ethtool_ops;
> dev->watchdog_timeo = VNET_TX_TIMEOUT;
>
> - dev->hw_features = NETIF_F_TSO | NETIF_F_GSO | NETIF_F_ALL_TSO |
> - NETIF_F_HW_CSUM | NETIF_F_SG;
> - dev->features = dev->hw_features;
> + netdev_feature_zero(&dev->hw_features);
> + netdev_feature_set_bits(NETIF_F_TSO | NETIF_F_GSO | NETIF_F_ALL_TSO |
> + NETIF_F_HW_CSUM | NETIF_F_SG,
> + &dev->hw_features);
> + netdev_feature_copy(&dev->features, dev->hw_features);
>
> /* MTU range: 68 - 65535 */
> dev->min_mtu = ETH_MIN_MTU;
> diff --git a/drivers/net/ethernet/sun/sunvnet_common.c b/drivers/net/ethernet/sun/sunvnet_common.c
> index 80fde5f..44f4bff 100644
> --- a/drivers/net/ethernet/sun/sunvnet_common.c
> +++ b/drivers/net/ethernet/sun/sunvnet_common.c
> @@ -1224,6 +1224,7 @@ vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb,
> struct net_device *dev = VNET_PORT_TO_NET_DEVICE(port);
> struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
> struct sk_buff *segs, *curr, *next;
> + netdev_features_t tmp;
> int maclen, datalen;
> int status;
> int gso_size, gso_type, gso_segs;
> @@ -1274,7 +1275,9 @@ vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb,
> skb_shinfo(skb)->gso_size = datalen;
> skb_shinfo(skb)->gso_segs = gso_segs;
> }
> - segs = skb_gso_segment(skb, dev->features & ~NETIF_F_TSO);
> + netdev_feature_copy(&tmp, dev->features);
> + netdev_feature_clear_bit(NETIF_F_TSO_BIT, &tmp);
> + segs = skb_gso_segment(skb, tmp);
> if (IS_ERR(segs))
> goto out_dropped;
>
1
0

18 Aug '21
在 2021/8/11 22:46, Jian Shen 写道:
> Use netdev_feature_xxx helpers to replace the logical operation
> for netdev features.
>
> Signed-off-by: Jian Shen <shenjian15(a)huawei.com>
> ---
> drivers/net/ethernet/amd/amd8111e.c | 8 +++-
> drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 20 ++++++---
> drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 72 ++++++++++++++++++++-----------
> drivers/net/ethernet/amd/xgbe/xgbe-main.c | 68 ++++++++++++++++-------------
> 4 files changed, 103 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/net/ethernet/amd/amd8111e.c b/drivers/net/ethernet/amd/amd8111e.c
> index 92e4246..1757eac 100644
> --- a/drivers/net/ethernet/amd/amd8111e.c
> +++ b/drivers/net/ethernet/amd/amd8111e.c
> @@ -1790,7 +1790,9 @@ static int amd8111e_probe_one(struct pci_dev *pdev,
> SET_NETDEV_DEV(dev, &pdev->dev);
>
> #if AMD8111E_VLAN_TAG_USED
> - dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
> + netdev_feature_set_bits(NETIF_F_HW_VLAN_CTAG_TX |
> + NETIF_F_HW_VLAN_CTAG_RX,
> + &dev->features);
> #endif
>
> lp = netdev_priv(dev);
> @@ -1829,7 +1831,9 @@ static int amd8111e_probe_one(struct pci_dev *pdev,
> netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32);
>
> #if AMD8111E_VLAN_TAG_USED
> - dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
> + netdev_feature_set_bits(NETIF_F_HW_VLAN_CTAG_TX |
> + NETIF_F_HW_VLAN_CTAG_RX,
> + &dev->features);
> #endif
> /* Probe the external PHY */
> amd8111e_probe_ext_phy(dev);
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
> index d5fd49d..6e1a5fb 100644
> --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
> @@ -449,7 +449,8 @@ static void xgbe_config_rss(struct xgbe_prv_data *pdata)
> if (!pdata->hw_feat.rss)
> return;
>
> - if (pdata->netdev->features & NETIF_F_RXHASH)
> + if (netdev_feature_test_bit(NETIF_F_RXHASH_BIT,
> + pdata->netdev->features))
> ret = xgbe_enable_rss(pdata);
> else
> ret = xgbe_disable_rss(pdata);
> @@ -948,7 +949,8 @@ static int xgbe_set_promiscuous_mode(struct xgbe_prv_data *pdata,
> if (enable) {
> xgbe_disable_rx_vlan_filtering(pdata);
> } else {
> - if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER)
> + if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
> + pdata->netdev->features))
> xgbe_enable_rx_vlan_filtering(pdata);
> }
>
> @@ -1990,7 +1992,7 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
> rdata->rx.len = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, PL);
>
> /* Set checksum done indicator as appropriate */
> - if (netdev->features & NETIF_F_RXCSUM) {
> + if (netdev_feature_test_bit(NETIF_F_RXCSUM_BIT, netdev->features)) {
> XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
> CSUM_DONE, 1);
> XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
> @@ -2021,7 +2023,8 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
> if (!err || !etlt) {
> /* No error if err is 0 or etlt is 0 */
> if ((etlt == 0x09) &&
> - (netdev->features & NETIF_F_HW_VLAN_CTAG_RX)) {
> + (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
> + netdev->features))) {
> XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
> VLAN_CTAG, 1);
> packet->vlan_ctag = XGMAC_GET_BITS_LE(rdesc->desc0,
> @@ -2823,7 +2826,8 @@ static void xgbe_config_mac_speed(struct xgbe_prv_data *pdata)
>
> static void xgbe_config_checksum_offload(struct xgbe_prv_data *pdata)
> {
> - if (pdata->netdev->features & NETIF_F_RXCSUM)
> + if (netdev_feature_test_bit(NETIF_F_RXCSUM_BIT,
> + pdata->netdev->features))
> xgbe_enable_rx_csum(pdata);
> else
> xgbe_disable_rx_csum(pdata);
> @@ -2838,12 +2842,14 @@ static void xgbe_config_vlan_support(struct xgbe_prv_data *pdata)
> /* Set the current VLAN Hash Table register value */
> xgbe_update_vlan_hash_table(pdata);
>
> - if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER)
> + if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
> + pdata->netdev->features))
> xgbe_enable_rx_vlan_filtering(pdata);
> else
> xgbe_disable_rx_vlan_filtering(pdata);
>
> - if (pdata->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
> + if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
> + pdata->netdev->features))
> xgbe_enable_rx_vlan_stripping(pdata);
> else
> xgbe_disable_rx_vlan_stripping(pdata);
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
> index dff9eec..cbf23e0 100644
> --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
> @@ -2188,37 +2188,46 @@ static void xgbe_fix_features(struct net_device *netdev,
> struct xgbe_prv_data *pdata = netdev_priv(netdev);
> netdev_features_t vxlan_base;
>
> - vxlan_base = NETIF_F_GSO_UDP_TUNNEL | NETIF_F_RX_UDP_TUNNEL_PORT;
> + netdev_feature_zero(&vxlan_base);
> + netdev_feature_set_bits(NETIF_F_GSO_UDP_TUNNEL |
> + NETIF_F_RX_UDP_TUNNEL_PORT,
> + &vxlan_base);
>
> if (!pdata->hw_feat.vxn)
> return;
>
> /* VXLAN CSUM requires VXLAN base */
> - if ((*features & NETIF_F_GSO_UDP_TUNNEL_CSUM) &&
> - !(*features & NETIF_F_GSO_UDP_TUNNEL)) {
> + if (netdev_feature_test_bit(NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
> + *features) &&
> + !netdev_feature_test_bit(NETIF_F_GSO_UDP_TUNNEL_BIT, *features)) {
> netdev_notice(netdev,
> "forcing tx udp tunnel support\n");
> - *features |= NETIF_F_GSO_UDP_TUNNEL;
> + netdev_feature_set_bit(NETIF_F_GSO_UDP_TUNNEL_BIT, features);
> }
>
> /* Can't do one without doing the other */
> - if ((*features & vxlan_base) != vxlan_base) {
> + if (!netdev_feature_subset(*features, vxlan_base)) {
> netdev_notice(netdev,
> "forcing both tx and rx udp tunnel support\n");
> - *features |= vxlan_base;
> + netdev_feature_or(features, *features, vxlan_base);
> }
>
> - if (*features & (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)) {
> - if (!(*features & NETIF_F_GSO_UDP_TUNNEL_CSUM)) {
> + if (netdev_feature_test_bits(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM,
> + *features)) {
> + if (!netdev_feature_test_bit(NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
> + *features)) {
> netdev_notice(netdev,
> "forcing tx udp tunnel checksumming on\n");
> - *features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
> + netdev_feature_set_bit(NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
> + features);
> }
> } else {
> - if (*features & NETIF_F_GSO_UDP_TUNNEL_CSUM) {
> + if (netdev_feature_test_bit(NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
> + *features)) {
> netdev_notice(netdev,
> "forcing tx udp tunnel checksumming off\n");
> - *features &= ~NETIF_F_GSO_UDP_TUNNEL_CSUM;
> + netdev_feature_clear_bit(NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,
> + features);
> }
> }
> }
> @@ -2228,37 +2237,47 @@ static int xgbe_set_features(struct net_device *netdev,
> {
> struct xgbe_prv_data *pdata = netdev_priv(netdev);
> struct xgbe_hw_if *hw_if = &pdata->hw_if;
> - netdev_features_t rxhash, rxcsum, rxvlan, rxvlan_filter;
> + bool rxhash, rxcsum, rxvlan, rxvlan_filter;
> int ret = 0;
>
> - rxhash = pdata->netdev_features & NETIF_F_RXHASH;
> - rxcsum = pdata->netdev_features & NETIF_F_RXCSUM;
> - rxvlan = pdata->netdev_features & NETIF_F_HW_VLAN_CTAG_RX;
> - rxvlan_filter = pdata->netdev_features & NETIF_F_HW_VLAN_CTAG_FILTER;
> + rxhash = netdev_feature_test_bit(NETIF_F_RXHASH_BIT,
> + pdata->netdev_features);
> + rxcsum = netdev_feature_test_bit(NETIF_F_RXCSUM_BIT,
> + pdata->netdev_features);
> + rxvlan = netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
> + pdata->netdev_features);
> + rxvlan_filter = netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
> + pdata->netdev_features);
>
> - if ((features & NETIF_F_RXHASH) && !rxhash)
> + if (netdev_feature_test_bit(NETIF_F_RXHASH_BIT, features) && !rxhash)
> ret = hw_if->enable_rss(pdata);
> - else if (!(features & NETIF_F_RXHASH) && rxhash)
> + else if (!netdev_feature_test_bit(NETIF_F_RXHASH_BIT, features) &&
> + rxhash)
> ret = hw_if->disable_rss(pdata);
> if (ret)
> return ret;
>
> - if ((features & NETIF_F_RXCSUM) && !rxcsum)
> + if (netdev_feature_test_bit(NETIF_F_RXCSUM_BIT, features) && !rxcsum)
> hw_if->enable_rx_csum(pdata);
> - else if (!(features & NETIF_F_RXCSUM) && rxcsum)
> + else if (!netdev_feature_test_bit(NETIF_F_RXCSUM_BIT, features) &&
> + rxcsum)
> hw_if->disable_rx_csum(pdata);
>
> - if ((features & NETIF_F_HW_VLAN_CTAG_RX) && !rxvlan)
> + if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, features) &&
> + !rxvlan)
> hw_if->enable_rx_vlan_stripping(pdata);
> - else if (!(features & NETIF_F_HW_VLAN_CTAG_RX) && rxvlan)
> + else if (!netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
> + features) && rxvlan)
> hw_if->disable_rx_vlan_stripping(pdata);
>
> - if ((features & NETIF_F_HW_VLAN_CTAG_FILTER) && !rxvlan_filter)
> + if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
> + features) && !rxvlan_filter)
> hw_if->enable_rx_vlan_filtering(pdata);
> - else if (!(features & NETIF_F_HW_VLAN_CTAG_FILTER) && rxvlan_filter)
> + else if (!netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
> + features) && rxvlan_filter)
> hw_if->disable_rx_vlan_filtering(pdata);
>
> - pdata->netdev_features = features;
> + netdev_feature_copy(&features, pdata->netdev_features);
it shoule be "netdev_feature_copy(pdata->netdev_features, &features);"
>
> DBGPR("<--xgbe_set_features\n");
>
> @@ -2584,7 +2603,8 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
>
> /* Be sure we don't exceed the configured MTU */
> max_len = netdev->mtu + ETH_HLEN;
> - if (!(netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
> + if (!netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
> + netdev->features) &&
> (skb->protocol == htons(ETH_P_8021Q)))
> max_len += VLAN_HLEN;
>
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
> index a218dc6..ace7324 100644
> --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
> @@ -342,45 +342,53 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata)
> #endif
>
> /* Set device features */
> - netdev->hw_features = NETIF_F_SG |
> - NETIF_F_IP_CSUM |
> - NETIF_F_IPV6_CSUM |
> - NETIF_F_RXCSUM |
> - NETIF_F_TSO |
> - NETIF_F_TSO6 |
> - NETIF_F_GRO |
> - NETIF_F_HW_VLAN_CTAG_RX |
> - NETIF_F_HW_VLAN_CTAG_TX |
> - NETIF_F_HW_VLAN_CTAG_FILTER;
> + netdev_feature_zero(&netdev->hw_features);
> + netdev_feature_set_bits(NETIF_F_SG |
> + NETIF_F_IP_CSUM |
> + NETIF_F_IPV6_CSUM |
> + NETIF_F_RXCSUM |
> + NETIF_F_TSO |
> + NETIF_F_TSO6 |
> + NETIF_F_GRO |
> + NETIF_F_HW_VLAN_CTAG_RX |
> + NETIF_F_HW_VLAN_CTAG_TX |
> + NETIF_F_HW_VLAN_CTAG_FILTER,
> + &netdev->hw_features);
>
> if (pdata->hw_feat.rss)
> - netdev->hw_features |= NETIF_F_RXHASH;
> + netdev_feature_set_bit(NETIF_F_RXHASH_BIT,
> + &netdev->hw_features);
>
> if (pdata->hw_feat.vxn) {
> - netdev->hw_enc_features = NETIF_F_SG |
> - NETIF_F_IP_CSUM |
> - NETIF_F_IPV6_CSUM |
> - NETIF_F_RXCSUM |
> - NETIF_F_TSO |
> - NETIF_F_TSO6 |
> - NETIF_F_GRO |
> - NETIF_F_GSO_UDP_TUNNEL |
> - NETIF_F_GSO_UDP_TUNNEL_CSUM;
> -
> - netdev->hw_features |= NETIF_F_GSO_UDP_TUNNEL |
> - NETIF_F_GSO_UDP_TUNNEL_CSUM;
> + netdev_feature_zero(&netdev->hw_enc_features);
> + netdev_feature_set_bits(NETIF_F_SG |
> + NETIF_F_IP_CSUM |
> + NETIF_F_IPV6_CSUM |
> + NETIF_F_RXCSUM |
> + NETIF_F_TSO |
> + NETIF_F_TSO6 |
> + NETIF_F_GRO |
> + NETIF_F_GSO_UDP_TUNNEL |
> + NETIF_F_GSO_UDP_TUNNEL_CSUM,
> + &netdev->hw_enc_features);
> +
> + netdev_feature_set_bits(NETIF_F_GSO_UDP_TUNNEL |
> + NETIF_F_GSO_UDP_TUNNEL_CSUM,
> + &netdev->hw_features);
>
> netdev->udp_tunnel_nic_info = xgbe_get_udp_tunnel_info();
> }
>
> - netdev->vlan_features |= NETIF_F_SG |
> - NETIF_F_IP_CSUM |
> - NETIF_F_IPV6_CSUM |
> - NETIF_F_TSO |
> - NETIF_F_TSO6;
> + netdev_feature_set_bits(NETIF_F_SG |
> + NETIF_F_IP_CSUM |
> + NETIF_F_IPV6_CSUM |
> + NETIF_F_TSO |
> + NETIF_F_TSO6,
> + &netdev->vlan_features);
>
> - netdev->features |= netdev->hw_features;
> - pdata->netdev_features = netdev->features;
> + netdev_feature_or(&netdev->features, netdev->features,
> + netdev->hw_features);
> + netdev_feature_copy(&pdata->netdev_features, netdev->features);
>
> netdev->priv_flags |= IFF_UNICAST_FLT;
> netdev->min_mtu = 0;
1
0
In order to support some configuration in coalesce uAPI, this RFC
extends coalesce uAPI and add support for CQE mode.
Below is some test result with HNS3 driver:
1. old ethtool(ioctl) + new kernel:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0
rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0
rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0
2. ethtool(netlink with cqe mode) + kernel without cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: n/a TX: n/a
3. ethool(netlink with cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: off TX: off
4. ethool(netlink without cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
Change log from RFC:
V3 -> V4:
add document explaining the difference between CQE and EQE
in #1 suggested by Jakub Kicinski.
V2 -> V3:
1. split #1 into adding new parameter and adding new attributes.
2. use NLA_POLICY_MAX(NLA_U8, 1) instead of NLA_U8.
3. modify the description of CQE in Document.
V1 -> V2:
refactor #1 in V1 suggestted by Jakub Kicinski.
Yufeng Mo (4):
ethtool: add two coalesce attributes for CQE mode
ethtool: extend coalesce setting uAPI with CQE mode
net: hns3: add support for EQE/CQE mode configuration
net: hns3: add ethtool support for CQE/EQE mode configuration
Documentation/networking/ethtool-netlink.rst | 15 +++++++
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 8 +++-
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 8 +++-
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 8 +++-
.../net/ethernet/aquantia/atlantic/aq_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bcmsysport.c | 8 +++-
drivers/net/ethernet/broadcom/bnx2.c | 12 ++++--
.../net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++-
drivers/net/ethernet/broadcom/tg3.c | 10 ++++-
drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 12 ++++--
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 8 +++-
.../net/ethernet/cavium/thunder/nicvf_ethtool.c | 4 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c | 8 +++-
.../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 8 +++-
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 8 +++-
drivers/net/ethernet/cortina/gemini.c | 8 +++-
drivers/net/ethernet/emulex/benet/be_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 8 +++-
.../net/ethernet/freescale/enetc/enetc_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/fec_main.c | 14 ++++---
drivers/net/ethernet/freescale/gianfar_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hip04_eth.c | 8 +++-
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 49 +++++++++++++++++++++-
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 11 +++++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 26 ++++++++++--
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 1 +
.../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 1 +
drivers/net/ethernet/huawei/hinic/hinic_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000e/ethtool.c | 8 +++-
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 8 +++-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 +++-
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 12 ++++--
drivers/net/ethernet/intel/igb/igb_ethtool.c | 8 +++-
drivers/net/ethernet/intel/igbvf/ethtool.c | 8 +++-
drivers/net/ethernet/intel/igc/igc_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 8 +++-
drivers/net/ethernet/jme.c | 12 ++++--
drivers/net/ethernet/marvell/mv643xx_eth.c | 12 ++++--
drivers/net/ethernet/marvell/mvneta.c | 14 +++++--
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 +++++--
.../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 8 +++-
drivers/net/ethernet/marvell/skge.c | 8 +++-
drivers/net/ethernet/marvell/sky2.c | 8 +++-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 8 +++-
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 8 +++-
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 8 +++-
.../ethernet/mellanox/mlx5/core/ipoib/ethtool.c | 8 +++-
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 12 ++++--
.../net/ethernet/netronome/nfp/nfp_net_ethtool.c | 8 +++-
drivers/net/ethernet/ni/nixge.c | 14 +++++--
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 8 +++-
.../ethernet/qlogic/netxen/netxen_nic_ethtool.c | 8 +++-
drivers/net/ethernet/qlogic/qede/qede.h | 4 +-
drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 8 +++-
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 8 +++-
drivers/net/ethernet/realtek/r8169_main.c | 10 ++++-
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c | 8 +++-
drivers/net/ethernet/sfc/ethtool.c | 8 +++-
drivers/net/ethernet/sfc/falcon/ethtool.c | 8 +++-
drivers/net/ethernet/socionext/netsec.c | 10 +++--
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 8 +++-
drivers/net/ethernet/synopsys/dwc-xlgmac-ethtool.c | 14 +++++--
drivers/net/ethernet/tehuti/tehuti.c | 12 ++++--
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_ethtool.c | 8 +++-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
drivers/net/ethernet/ti/cpsw_priv.h | 8 +++-
drivers/net/ethernet/ti/davinci_emac.c | 8 +++-
drivers/net/ethernet/via/via-velocity.c | 8 +++-
drivers/net/ethernet/xilinx/ll_temac_main.c | 14 +++++--
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 +++++--
drivers/net/netdevsim/ethtool.c | 8 +++-
drivers/net/tun.c | 8 +++-
drivers/net/usb/r8152.c | 8 +++-
drivers/net/virtio_net.c | 8 +++-
drivers/net/vmxnet3/vmxnet3_ethtool.c | 12 ++++--
drivers/net/wireless/ath/wil6210/ethtool.c | 14 +++++--
drivers/s390/net/qeth_ethtool.c | 4 +-
drivers/staging/qlge/qlge_ethtool.c | 10 ++++-
include/linux/ethtool.h | 22 ++++++++--
include/uapi/linux/ethtool_netlink.h | 2 +
net/ethtool/coalesce.c | 29 ++++++++++---
net/ethtool/ioctl.c | 15 +++++--
net/ethtool/netlink.h | 2 +-
93 files changed, 678 insertions(+), 208 deletions(-)
--
2.8.1
3
8
In order to support some configuration in coalesce uAPI, this RFC
extends coalesce uAPI and add support for CQE mode.
Below is some test result with HNS3 driver:
1. old ethtool(ioctl) + new kernel:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0
rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0
rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0
2. ethtool(netlink with cqe mode) + kernel without cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: n/a TX: n/a
3. ethool(netlink with cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: off TX: off
4. ethool(netlink without cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
Change log:
V3 -> V4:
add document explaining the difference between CQE and EQE
in #1 suggested by Jakub Kicinski.
V2 -> V3:
1. split #1 into adding new parameter and adding new attributes.
2. use NLA_POLICY_MAX(NLA_U8, 1) instead of NLA_U8.
3. modify the description of CQE in Document.
V1 -> V2:
refactor #1 in V1 suggestted by Jakub Kicinski.
Yufeng Mo (4):
ethtool: add two coalesce attributes for CQE mode
ethtool: extend coalesce setting uAPI with CQE mode
net: hns3: add support for EQE/CQE mode configuration
net: hns3: add ethtool support for CQE/EQE mode configuration
Documentation/networking/ethtool-netlink.rst | 15 +++++++
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 8 +++-
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 8 +++-
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 8 +++-
.../net/ethernet/aquantia/atlantic/aq_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bcmsysport.c | 8 +++-
drivers/net/ethernet/broadcom/bnx2.c | 12 ++++--
.../net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++-
drivers/net/ethernet/broadcom/tg3.c | 10 ++++-
drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 12 ++++--
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 8 +++-
.../net/ethernet/cavium/thunder/nicvf_ethtool.c | 4 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c | 8 +++-
.../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 8 +++-
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 8 +++-
drivers/net/ethernet/cortina/gemini.c | 8 +++-
drivers/net/ethernet/emulex/benet/be_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 8 +++-
.../net/ethernet/freescale/enetc/enetc_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/fec_main.c | 14 ++++---
drivers/net/ethernet/freescale/gianfar_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hip04_eth.c | 8 +++-
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 49 +++++++++++++++++++++-
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 11 +++++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 26 ++++++++++--
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 1 +
.../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 1 +
drivers/net/ethernet/huawei/hinic/hinic_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000e/ethtool.c | 8 +++-
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 8 +++-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 +++-
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 12 ++++--
drivers/net/ethernet/intel/igb/igb_ethtool.c | 8 +++-
drivers/net/ethernet/intel/igbvf/ethtool.c | 8 +++-
drivers/net/ethernet/intel/igc/igc_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 8 +++-
drivers/net/ethernet/jme.c | 12 ++++--
drivers/net/ethernet/marvell/mv643xx_eth.c | 12 ++++--
drivers/net/ethernet/marvell/mvneta.c | 14 +++++--
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 +++++--
.../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 8 +++-
drivers/net/ethernet/marvell/skge.c | 8 +++-
drivers/net/ethernet/marvell/sky2.c | 8 +++-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 8 +++-
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 8 +++-
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 8 +++-
.../ethernet/mellanox/mlx5/core/ipoib/ethtool.c | 8 +++-
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 12 ++++--
.../net/ethernet/netronome/nfp/nfp_net_ethtool.c | 8 +++-
drivers/net/ethernet/ni/nixge.c | 14 +++++--
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 8 +++-
.../ethernet/qlogic/netxen/netxen_nic_ethtool.c | 8 +++-
drivers/net/ethernet/qlogic/qede/qede.h | 4 +-
drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 8 +++-
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 8 +++-
drivers/net/ethernet/realtek/r8169_main.c | 10 ++++-
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c | 8 +++-
drivers/net/ethernet/sfc/ethtool.c | 8 +++-
drivers/net/ethernet/sfc/falcon/ethtool.c | 8 +++-
drivers/net/ethernet/socionext/netsec.c | 10 +++--
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 8 +++-
drivers/net/ethernet/synopsys/dwc-xlgmac-ethtool.c | 14 +++++--
drivers/net/ethernet/tehuti/tehuti.c | 12 ++++--
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_ethtool.c | 8 +++-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
drivers/net/ethernet/ti/cpsw_priv.h | 8 +++-
drivers/net/ethernet/ti/davinci_emac.c | 8 +++-
drivers/net/ethernet/via/via-velocity.c | 8 +++-
drivers/net/ethernet/xilinx/ll_temac_main.c | 14 +++++--
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 +++++--
drivers/net/netdevsim/ethtool.c | 8 +++-
drivers/net/tun.c | 8 +++-
drivers/net/usb/r8152.c | 8 +++-
drivers/net/virtio_net.c | 8 +++-
drivers/net/vmxnet3/vmxnet3_ethtool.c | 12 ++++--
drivers/net/wireless/ath/wil6210/ethtool.c | 14 +++++--
drivers/s390/net/qeth_ethtool.c | 4 +-
drivers/staging/qlge/qlge_ethtool.c | 10 ++++-
include/linux/ethtool.h | 22 ++++++++--
include/uapi/linux/ethtool_netlink.h | 2 +
net/ethtool/coalesce.c | 29 ++++++++++---
net/ethtool/ioctl.c | 15 +++++--
net/ethtool/netlink.h | 2 +-
93 files changed, 678 insertions(+), 208 deletions(-)
--
2.8.1
1
4
In order to support some configuration in coalesce uAPI, this RFC
extends coalesce uAPI and add support for CQE mode.
Below is some test result with HNS3 driver:
1. old ethtool(ioctl) + new kernel:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0
rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0
rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0
2. ethtool(netlink with cqe mode) + kernel without cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: n/a TX: n/a
3. ethool(netlink with cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: off TX: off
4. ethool(netlink without cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
Change log:
V2 -> V3:
1. split #1 into adding new parameter and adding new attributes.
2. use NLA_POLICY_MAX(NLA_U8, 1) instead of NLA_U8.
3. modify the description of CQE in Document.
V1 -> V2:
refactor #1 in V1 suggestted by Jakub Kicinski.
Yufeng Mo (4):
ethtool: add two coalesce attributes for CQE mode
ethtool: extend coalesce setting uAPI with CQE mode
net: hns3: add support for EQE/CQE mode configuration
net: hns3: add ethtool support for CQE/EQE mode configuration
Documentation/networking/ethtool-netlink.rst | 8 ++++
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 8 +++-
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 8 +++-
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 8 +++-
.../net/ethernet/aquantia/atlantic/aq_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bcmsysport.c | 8 +++-
drivers/net/ethernet/broadcom/bnx2.c | 12 ++++--
.../net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++-
drivers/net/ethernet/broadcom/tg3.c | 10 ++++-
drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 12 ++++--
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 8 +++-
.../net/ethernet/cavium/thunder/nicvf_ethtool.c | 4 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c | 8 +++-
.../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 8 +++-
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 8 +++-
drivers/net/ethernet/cortina/gemini.c | 8 +++-
drivers/net/ethernet/emulex/benet/be_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 8 +++-
.../net/ethernet/freescale/enetc/enetc_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/fec_main.c | 14 ++++---
drivers/net/ethernet/freescale/gianfar_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hip04_eth.c | 8 +++-
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 49 +++++++++++++++++++++-
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 11 +++++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 26 ++++++++++--
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 1 +
.../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 1 +
drivers/net/ethernet/huawei/hinic/hinic_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000e/ethtool.c | 8 +++-
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 8 +++-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 +++-
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 12 ++++--
drivers/net/ethernet/intel/igb/igb_ethtool.c | 8 +++-
drivers/net/ethernet/intel/igbvf/ethtool.c | 8 +++-
drivers/net/ethernet/intel/igc/igc_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 8 +++-
drivers/net/ethernet/jme.c | 12 ++++--
drivers/net/ethernet/marvell/mv643xx_eth.c | 12 ++++--
drivers/net/ethernet/marvell/mvneta.c | 14 +++++--
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 +++++--
.../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 8 +++-
drivers/net/ethernet/marvell/skge.c | 8 +++-
drivers/net/ethernet/marvell/sky2.c | 8 +++-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 8 +++-
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 8 +++-
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 8 +++-
.../ethernet/mellanox/mlx5/core/ipoib/ethtool.c | 8 +++-
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 12 ++++--
.../net/ethernet/netronome/nfp/nfp_net_ethtool.c | 8 +++-
drivers/net/ethernet/ni/nixge.c | 14 +++++--
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 8 +++-
.../ethernet/qlogic/netxen/netxen_nic_ethtool.c | 8 +++-
drivers/net/ethernet/qlogic/qede/qede.h | 4 +-
drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 8 +++-
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 8 +++-
drivers/net/ethernet/realtek/r8169_main.c | 10 ++++-
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c | 8 +++-
drivers/net/ethernet/sfc/ethtool.c | 8 +++-
drivers/net/ethernet/sfc/falcon/ethtool.c | 8 +++-
drivers/net/ethernet/socionext/netsec.c | 10 +++--
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 8 +++-
drivers/net/ethernet/synopsys/dwc-xlgmac-ethtool.c | 14 +++++--
drivers/net/ethernet/tehuti/tehuti.c | 12 ++++--
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_ethtool.c | 8 +++-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
drivers/net/ethernet/ti/cpsw_priv.h | 8 +++-
drivers/net/ethernet/ti/davinci_emac.c | 8 +++-
drivers/net/ethernet/via/via-velocity.c | 8 +++-
drivers/net/ethernet/xilinx/ll_temac_main.c | 14 +++++--
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 +++++--
drivers/net/netdevsim/ethtool.c | 8 +++-
drivers/net/tun.c | 8 +++-
drivers/net/usb/r8152.c | 8 +++-
drivers/net/virtio_net.c | 8 +++-
drivers/net/vmxnet3/vmxnet3_ethtool.c | 12 ++++--
drivers/net/wireless/ath/wil6210/ethtool.c | 14 +++++--
drivers/s390/net/qeth_ethtool.c | 4 +-
drivers/staging/qlge/qlge_ethtool.c | 10 ++++-
include/linux/ethtool.h | 22 ++++++++--
include/uapi/linux/ethtool_netlink.h | 2 +
net/ethtool/coalesce.c | 29 ++++++++++---
net/ethtool/ioctl.c | 15 +++++--
net/ethtool/netlink.h | 2 +-
93 files changed, 671 insertions(+), 208 deletions(-)
--
2.8.1
3
6
My good friend,
I just want to know if you, can help me to transfer the amount of
($6Million). After the transfer we have to share it, 50% for me, and
50% for you. Please let me know if you can help me for more
information in regards with the transfer. I hope you can work with me
honestly?
Thanks.
Godwin Peter,
1
0
In order to support some configuration in coalesce uAPI, this RFC
extends coalesce uAPI and add support for CQE mode.
Below is some test result with HNS3 driver:
1. old ethtool(ioctl) + new kernel:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0
rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0
rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0
2. ethtool(netlink with cqe mode) + kernel without cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: n/a TX: n/a
3. ethool(netlink with cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
CQE mode RX: off TX: off
4. ethool(netlink without cqe mode) + kernel with cqe mode:
estuary:/$ ethtool -c eth0
Coalesce parameters for eth0:
Adaptive RX: on TX: on
stats-block-usecs: n/a
sample-interval: n/a
pkt-rate-low: n/a
pkt-rate-high: n/a
rx-usecs: 20
rx-frames: 0
rx-usecs-irq: n/a
rx-frames-irq: n/a
tx-usecs: 20
tx-frames: 0
tx-usecs-irq: n/a
tx-frames-irq: n/a
rx-usecs-low: n/a
rx-frame-low: n/a
tx-usecs-low: n/a
tx-frame-low: n/a
rx-usecs-high: 0
rx-frame-high: n/a
tx-usecs-high: 0
tx-frame-high: n/a
Change log:
V2 -> V3:
1. split #1 into adding new parameter and adding new attributes.
2. use NLA_POLICY_MAX(NLA_U8, 1) instead of NLA_U8.
3. modify the description of CQE in Document.
V1 -> V2:
refactor #1 in V1 suggestted by Jakub Kicinski.
Yufeng Mo (4):
ethtool: add two coalesce attributes for CQE mode
ethtool: extend coalesce setting uAPI with CQE mode
net: hns3: add support for EQE/CQE mode configuration
net: hns3: add ethtool support for CQE/EQE mode configuration
Documentation/networking/ethtool-netlink.rst | 8 ++++
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 8 +++-
drivers/net/ethernet/amazon/ena/ena_ethtool.c | 8 +++-
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 8 +++-
.../net/ethernet/aquantia/atlantic/aq_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bcmsysport.c | 8 +++-
drivers/net/ethernet/broadcom/bnx2.c | 12 ++++--
.../net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 +++-
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++-
drivers/net/ethernet/broadcom/tg3.c | 10 ++++-
drivers/net/ethernet/brocade/bna/bnad_ethtool.c | 12 ++++--
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 8 +++-
.../net/ethernet/cavium/thunder/nicvf_ethtool.c | 4 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 8 +++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c | 8 +++-
.../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 8 +++-
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 8 +++-
drivers/net/ethernet/cortina/gemini.c | 8 +++-
drivers/net/ethernet/emulex/benet/be_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 8 +++-
.../net/ethernet/freescale/enetc/enetc_ethtool.c | 8 +++-
drivers/net/ethernet/freescale/fec_main.c | 14 ++++---
drivers/net/ethernet/freescale/gianfar_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hip04_eth.c | 8 +++-
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 8 +++-
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 49 +++++++++++++++++++++-
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 11 +++++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 26 ++++++++++--
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 1 +
.../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 1 +
drivers/net/ethernet/huawei/hinic/hinic_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 8 +++-
drivers/net/ethernet/intel/e1000e/ethtool.c | 8 +++-
drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 8 +++-
drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 8 +++-
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ice/ice_ethtool.c | 12 ++++--
drivers/net/ethernet/intel/igb/igb_ethtool.c | 8 +++-
drivers/net/ethernet/intel/igbvf/ethtool.c | 8 +++-
drivers/net/ethernet/intel/igc/igc_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 8 +++-
drivers/net/ethernet/intel/ixgbevf/ethtool.c | 8 +++-
drivers/net/ethernet/jme.c | 12 ++++--
drivers/net/ethernet/marvell/mv643xx_eth.c | 12 ++++--
drivers/net/ethernet/marvell/mvneta.c | 14 +++++--
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 +++++--
.../ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 8 +++-
drivers/net/ethernet/marvell/skge.c | 8 +++-
drivers/net/ethernet/marvell/sky2.c | 8 +++-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 8 +++-
.../net/ethernet/mellanox/mlx5/core/en_ethtool.c | 8 +++-
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 8 +++-
.../ethernet/mellanox/mlx5/core/ipoib/ethtool.c | 8 +++-
drivers/net/ethernet/myricom/myri10ge/myri10ge.c | 12 ++++--
.../net/ethernet/netronome/nfp/nfp_net_ethtool.c | 8 +++-
drivers/net/ethernet/ni/nixge.c | 14 +++++--
.../net/ethernet/pensando/ionic/ionic_ethtool.c | 8 +++-
.../ethernet/qlogic/netxen/netxen_nic_ethtool.c | 8 +++-
drivers/net/ethernet/qlogic/qede/qede.h | 4 +-
drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 8 +++-
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 8 +++-
drivers/net/ethernet/realtek/r8169_main.c | 10 ++++-
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c | 8 +++-
drivers/net/ethernet/sfc/ethtool.c | 8 +++-
drivers/net/ethernet/sfc/falcon/ethtool.c | 8 +++-
drivers/net/ethernet/socionext/netsec.c | 10 +++--
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 8 +++-
drivers/net/ethernet/synopsys/dwc-xlgmac-ethtool.c | 14 +++++--
drivers/net/ethernet/tehuti/tehuti.c | 12 ++++--
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_ethtool.c | 8 +++-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
drivers/net/ethernet/ti/cpsw_priv.h | 8 +++-
drivers/net/ethernet/ti/davinci_emac.c | 8 +++-
drivers/net/ethernet/via/via-velocity.c | 8 +++-
drivers/net/ethernet/xilinx/ll_temac_main.c | 14 +++++--
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 +++++--
drivers/net/netdevsim/ethtool.c | 8 +++-
drivers/net/tun.c | 8 +++-
drivers/net/usb/r8152.c | 8 +++-
drivers/net/virtio_net.c | 8 +++-
drivers/net/vmxnet3/vmxnet3_ethtool.c | 12 ++++--
drivers/net/wireless/ath/wil6210/ethtool.c | 14 +++++--
drivers/s390/net/qeth_ethtool.c | 4 +-
drivers/staging/qlge/qlge_ethtool.c | 10 ++++-
include/linux/ethtool.h | 22 ++++++++--
include/uapi/linux/ethtool_netlink.h | 2 +
net/ethtool/coalesce.c | 29 ++++++++++---
net/ethtool/ioctl.c | 15 +++++--
net/ethtool/netlink.h | 2 +-
93 files changed, 671 insertions(+), 208 deletions(-)
--
2.8.1
1
4

09 Aug '21
As mentioned in commit c07aea3ef4d4 ("mm: add a signature in
struct page"):
"The page->signature field is aliased to page->lru.next and
page->compound_head."
And as the comment in page_is_pfmemalloc():
"lru.next has bit 1 set if the page is allocated from the
pfmemalloc reserves. Callers may simply overwrite it if they
do not need to preserve that information."
The page->signature is OR’ed with PP_SIGNATURE when a page is
allocated in page pool, see __page_pool_alloc_pages_slow(),
and page->signature is checked directly with PP_SIGNATURE in
page_pool_return_skb_page(), which might cause resoure leaking
problem for a page from page pool if bit 1 of lru.next is set
for a pfmemalloc page. What happens here is that the original
pp->signature is OR'ed with PP_SIGNATURE after the allocation
in order to preserve any existing bits(such as the bit 1, used
to indicate a pfmemalloc page), so when those bits are present,
those page is not considered to be from page pool and the DMA
mapping of those pages will be left stale.
As bit 0 is for page->compound_head, So mask both bit 0/1 before
the checking in page_pool_return_skb_page(). And we will return
those pfmemalloc pages back to the page allocator after cleaning
up the DMA mapping.
Fixes: 6a5bcd84e886 ("page_pool: Allow drivers to hint on SKB recycling")
Reviewed-by: Ilias Apalodimas <ilias.apalodimas(a)linaro.org>
Signed-off-by: Yunsheng Lin <linyunsheng(a)huawei.com>
---
V2: explain more on why we need to mask those bits.
---
net/core/page_pool.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/net/core/page_pool.c b/net/core/page_pool.c
index 5e4eb45..8ab7b40 100644
--- a/net/core/page_pool.c
+++ b/net/core/page_pool.c
@@ -634,7 +634,15 @@ bool page_pool_return_skb_page(struct page *page)
struct page_pool *pp;
page = compound_head(page);
- if (unlikely(page->pp_magic != PP_SIGNATURE))
+
+ /* page->pp_magic is OR'ed with PP_SIGNATURE after the allocation
+ * in order to preserve any existing bits, such as bit 0 for the
+ * head page of compound page and bit 1 for pfmemalloc page, so
+ * mask those bits for freeing side when doing below checking,
+ * and page_is_pfmemalloc() is checked in __page_pool_put_page()
+ * to avoid recycling the pfmemalloc page.
+ */
+ if (unlikely((page->pp_magic & ~0x3UL) != PP_SIGNATURE))
return false;
pp = page->pp;
--
2.7.4
2
1

06 Aug '21
Currently, four reset types are supported for the HNS3 ethernet
driver: IMP reset, global reset, function reset, and FLR. Only
FLR can now be triggered by the user. To restore the device when
an exception occurs, add support for triggering reset by ethtool.
Run the "ethtool --reset DEVNAME mgmt | all | dedicated" to
trigger the IMP | global | function reset manually.
In addition, VF can only trigger function reset.
Signed-off-by: Yufeng Mo <moyufeng(a)huawei.com>
---
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 5 ++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 56 ++++++++++++++++++++++
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 6 +++
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.h | 1 +
4 files changed, 68 insertions(+)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
index 15af3d9..f40d44a 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
@@ -593,6 +593,11 @@ struct hns3_hw_error_info {
const char *msg;
};
+struct hns3_reset_type_map {
+ enum ethtool_reset_flags rst_flags;
+ enum hnae3_reset_type rst_type;
+};
+
static inline int ring_space(struct hns3_enet_ring *ring)
{
/* This smp_load_acquire() pairs with smp_store_release() in
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 82061ab..c8f09b0 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -953,6 +953,60 @@ static int hns3_get_rxnfc(struct net_device *netdev,
}
}
+static const struct hns3_reset_type_map hns3_reset_type[] = {
+ {ETH_RESET_MGMT, HNAE3_IMP_RESET},
+ {ETH_RESET_ALL, HNAE3_GLOBAL_RESET},
+ {ETH_RESET_DEDICATED, HNAE3_FUNC_RESET},
+};
+
+static const struct hns3_reset_type_map hns3vf_reset_type[] = {
+ {ETH_RESET_DEDICATED, HNAE3_VF_FUNC_RESET},
+};
+
+static int hns3_set_reset(struct net_device *netdev, u32 *flags)
+{
+ enum hnae3_reset_type rst_type = HNAE3_NONE_RESET;
+ struct hnae3_handle *h = hns3_get_handle(netdev);
+ struct hnae3_ae_dev *ae_dev = pci_get_drvdata(h->pdev);
+ const struct hnae3_ae_ops *ops = h->ae_algo->ops;
+ const struct hns3_reset_type_map *rst_type_map;
+ u32 i, size;
+
+ if (ops->ae_dev_resetting && ops->ae_dev_resetting(h))
+ return -EBUSY;
+
+ if (!ops->set_default_reset_request || !ops->reset_event)
+ return -EOPNOTSUPP;
+
+ if (h->flags & HNAE3_SUPPORT_VF) {
+ rst_type_map = hns3vf_reset_type;
+ size = ARRAY_SIZE(hns3vf_reset_type);
+ } else {
+ rst_type_map = hns3_reset_type;
+ size = ARRAY_SIZE(hns3_reset_type);
+ }
+
+ for (i = 0; i < size; i++) {
+ if (rst_type_map[i].rst_flags == *flags) {
+ rst_type = rst_type_map[i].rst_type;
+ break;
+ }
+ }
+
+ if (rst_type == HNAE3_NONE_RESET ||
+ (rst_type == HNAE3_IMP_RESET &&
+ ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2))
+ return -EOPNOTSUPP;
+
+ netdev_info(netdev, "Setting reset type %d\n", rst_type);
+
+ ops->set_default_reset_request(ae_dev, rst_type);
+
+ ops->reset_event(h->pdev, h);
+
+ return 0;
+}
+
static void hns3_change_all_ring_bd_num(struct hns3_nic_priv *priv,
u32 tx_desc_num, u32 rx_desc_num)
{
@@ -1699,6 +1753,7 @@ static const struct ethtool_ops hns3vf_ethtool_ops = {
.set_priv_flags = hns3_set_priv_flags,
.get_tunable = hns3_get_tunable,
.set_tunable = hns3_set_tunable,
+ .reset = hns3_set_reset,
};
static const struct ethtool_ops hns3_ethtool_ops = {
@@ -1740,6 +1795,7 @@ static const struct ethtool_ops hns3_ethtool_ops = {
.get_ts_info = hns3_get_ts_info,
.get_tunable = hns3_get_tunable,
.set_tunable = hns3_set_tunable,
+ .reset = hns3_set_reset,
};
void hns3_ethtool_set_ops(struct net_device *netdev)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index f15d76e..9fd1528 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -3789,6 +3789,12 @@ static void hclge_do_reset(struct hclge_dev *hdev)
}
switch (hdev->reset_type) {
+ case HNAE3_IMP_RESET:
+ dev_info(&pdev->dev, "IMP reset requested\n");
+ val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
+ hnae3_set_bit(val, HCLGE_TRIGGER_IMP_RESET_B, 1);
+ hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, val);
+ break;
case HNAE3_GLOBAL_RESET:
dev_info(&pdev->dev, "global reset requested\n");
val = hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
index cc31b12..ada5c68 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
@@ -194,6 +194,7 @@ enum HLCGE_PORT_TYPE {
#define HCLGE_VECTOR0_IMP_CMDQ_ERR_B 4U
#define HCLGE_VECTOR0_IMP_RD_POISON_B 5U
#define HCLGE_VECTOR0_ALL_MSIX_ERR_B 6U
+#define HCLGE_TRIGGER_IMP_RESET_B 7U
#define HCLGE_MAC_DEFAULT_FRAME \
(ETH_HLEN + ETH_FCS_LEN + 2 * VLAN_HLEN + ETH_DATA_LEN)
--
2.8.1
1
0