Linuxarm
Threads by month
- ----- 2025 -----
- 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
September 2021
- 19 participants
- 20 discussions
This patchset adds frag page support in page pool and
enable skb's page frag recycling based on page pool in
hns3 drvier.
V2:
1. resend based on the latest net-next.
V1:
1. avoid atomic_long_read() in case of freeing or draining
page frag, and drop RFC tag.
RFC v6:
1. Disable frag page support in system 32-bit arch and
64-bit DMA.
RFC v5:
1. Rename dma_addr[0] to pp_frag_count and adjust codes
according to the rename.
RFC v4:
1. Use the dma_addr[1] to store bias.
2. Default to a pagecnt_bias of PAGE_SIZE - 1.
3. other minor comment suggested by Alexander.
RFC v3:
1. Implement the semantic of "page recycling only wait for the
page pool user instead of all user of a page"
2. Support the frag allocation of different sizes
3. Merge patch 4 & 5 to one patch as it does not make sense to
use page_pool_dev_alloc_pages() API directly with elevated
refcnt.
4. other minor comment suggested by Alexander.
RFC v2:
1. Split patch 1 to more reviewable one.
2. Repurpose the lower 12 bits of the dma address to store the
pagecnt_bias as suggested by Alexander.
3. support recycling to pool->alloc for elevated refcnt case
too.
Yunsheng Lin (4):
page_pool: keep pp info as long as page pool owns the page
page_pool: add interface to manipulate frag count in page pool
page_pool: add frag page recycling support in page pool
net: hns3: support skb's frag page recycling based on page pool
drivers/net/ethernet/hisilicon/Kconfig | 1 +
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 79 +++++++++++++++--
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 3 +
drivers/net/ethernet/marvell/mvneta.c | 6 +-
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 +-
drivers/net/ethernet/ti/cpsw.c | 2 +-
drivers/net/ethernet/ti/cpsw_new.c | 2 +-
include/linux/mm_types.h | 18 ++--
include/linux/skbuff.h | 4 +-
include/net/page_pool.h | 68 +++++++++++---
net/core/page_pool.c | 112 +++++++++++++++++++++++-
11 files changed, 258 insertions(+), 39 deletions(-)
--
2.7.4
7
25
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 necessary 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 167 patches to 5 parts.
patch 1~22: convert the prototype which use netdev_features_t
as return value
patch 24: introduce fake helpers for bitmap operation
patch 25~165: use netdev_feature_xxx helpers
patch 166: use macro __DECLARE_NETDEV_FEATURE_MASK to replace
netdev_feature_t declaration.
patch 167: change the type of netdev_features_t to bitmap,
and rewrite the bitmap helpers.
Sorry to send a so huge patchset, I wanna to get more suggestions
to finish this work, to make it much more reviewable and feasible.
The former discussing for the changes, see [1]
[1]. https://www.spinics.net/lists/netdev/msg753528.html
ChangeLog:
V1->V2:
use bitmap by comment from Andrew Lunn
Jian Shen (167):
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
net: tls: 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: mpls: use netdev feature helpers
net: nsh: use netdev feature helpers
net: decnet: use netdev feature helpers
net: dccp: use netdev feature helpers
net: l2tp: use netdev feature helpers
net: ntb_netdev: use netdev feature helpers
net: thunderbolt: use netdev feature helpers
net: phonet: use netdev feature helpers
net: vrf: use netdev feature helpers
net: sctp: 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: caif: 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: rionet: use netdev feature helpers
net: gtp: use netdev feature helpers
net: vsockmon: 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
scsi: fcoe: use netdev feature helpers
net: ipvs: use netdev feature helpers
net: xfrm: use netdev feature helpers
net: cirrus: use netdev feature helpers
net: ec_bhf: use netdev feature helpers
net: hamradio: use netdev feature helpers
net: batman: use netdev feature helpers
net: ieee802154: use netdev feature helpers
test_bpf: change the prototype of features
net: openvswitch: use netdev feature helpers
firewire: use netdev feature helpers
staging: qlge: use netdev feature helpers
staging: octeon: 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/firewire/net.c | 3 +-
drivers/infiniband/hw/hfi1/vnic_main.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 21 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 2 +-
drivers/net/bareudp.c | 16 +-
drivers/net/bonding/bond_main.c | 136 +++---
drivers/net/bonding/bond_options.c | 12 +-
drivers/net/caif/caif_serial.c | 2 +-
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 +-
.../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 +-
.../net/ethernet/apm/xgene/xgene_enet_main.c | 21 +-
.../ethernet/aquantia/atlantic/aq_filters.c | 12 +-
.../ethernet/aquantia/atlantic/aq_macsec.c | 2 +-
.../net/ethernet/aquantia/atlantic/aq_main.c | 27 +-
.../net/ethernet/aquantia/atlantic/aq_nic.c | 28 +-
.../net/ethernet/aquantia/atlantic/aq_nic.h | 2 +-
.../net/ethernet/aquantia/atlantic/aq_ring.c | 3 +-
.../aquantia/atlantic/hw_atl/hw_atl_b0.c | 3 +-
drivers/net/ethernet/atheros/alx/main.c | 23 +-
.../net/ethernet/atheros/atl1c/atl1c_main.c | 33 +-
.../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 +-
.../net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 67 +--
.../net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 3 +-
.../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 +-
.../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 +-
.../net/ethernet/cavium/liquidio/lio_core.c | 6 +-
.../net/ethernet/cavium/liquidio/lio_main.c | 95 ++--
.../ethernet/cavium/liquidio/lio_vf_main.c | 79 ++--
.../net/ethernet/cavium/thunder/nicvf_main.c | 50 ++-
.../ethernet/cavium/thunder/nicvf_queues.c | 2 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 50 ++-
drivers/net/ethernet/chelsio/cxgb/sge.c | 12 +-
.../net/ethernet/chelsio/cxgb3/cxgb3_main.c | 60 ++-
drivers/net/ethernet/chelsio/cxgb3/sge.c | 10 +-
.../net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c | 16 +-
.../net/ethernet/chelsio/cxgb4/cxgb4_main.c | 88 ++--
.../net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.h | 3 +-
drivers/net/ethernet/chelsio/cxgb4/sge.c | 14 +-
.../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/cirrus/ep93xx_eth.c | 2 +-
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/ec_bhf.c | 2 +-
drivers/net/ethernet/emulex/benet/be_main.c | 68 +--
drivers/net/ethernet/ethoc.c | 2 +-
drivers/net/ethernet/faraday/ftgmac100.c | 38 +-
.../net/ethernet/freescale/dpaa/dpaa_eth.c | 23 +-
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 44 +-
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 5 +-
drivers/net/ethernet/freescale/enetc/enetc.c | 34 +-
.../net/ethernet/freescale/enetc/enetc_pf.c | 38 +-
.../net/ethernet/freescale/enetc/enetc_qos.c | 2 +-
.../net/ethernet/freescale/enetc/enetc_vf.c | 16 +-
drivers/net/ethernet/freescale/fec_main.c | 29 +-
.../ethernet/freescale/fs_enet/fs_enet-main.c | 2 +-
drivers/net/ethernet/freescale/gianfar.c | 39 +-
.../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 ++-
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 109 +++--
.../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 | 69 +--
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 +-
.../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 | 130 +++---
drivers/net/ethernet/intel/ixgb/ixgb_main.c | 49 +-
.../net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 3 +-
.../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 +++++----
.../net/ethernet/intel/ixgbe/ixgbe_sriov.c | 6 +-
drivers/net/ethernet/intel/ixgbevf/ipsec.c | 9 +-
.../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 +-
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 73 +--
.../marvell/octeontx2/nic/otx2_common.c | 3 +-
.../marvell/octeontx2/nic/otx2_ethtool.c | 4 +-
.../ethernet/marvell/octeontx2/nic/otx2_pf.c | 85 ++--
.../marvell/octeontx2/nic/otx2_txrx.c | 8 +-
.../ethernet/marvell/octeontx2/nic/otx2_vf.c | 35 +-
.../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 | 68 +--
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
.../net/ethernet/mellanox/mlx4/en_ethtool.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_main.c | 8 +-
.../net/ethernet/mellanox/mlx4/en_netdev.c | 198 +++++----
.../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 +-
.../mellanox/mlx5/core/en_accel/ipsec.c | 18 +-
.../mellanox/mlx5/core/en_accel/ipsec_rxtx.h | 15 +-
.../mellanox/mlx5/core/en_accel/ktls.c | 14 +-
.../mellanox/mlx5/core/en_accel/tls.c | 16 +-
.../net/ethernet/mellanox/mlx5/core/en_arfs.c | 6 +-
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 3 +-
.../net/ethernet/mellanox/mlx5/core/en_fs.c | 3 +-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 250 ++++++-----
.../net/ethernet/mellanox/mlx5/core/en_rep.c | 25 +-
.../net/ethernet/mellanox/mlx5/core/en_rx.c | 9 +-
.../net/ethernet/mellanox/mlx5/core/en_tc.c | 2 +-
.../ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 19 +-
.../net/ethernet/mellanox/mlxsw/spectrum.c | 36 +-
drivers/net/ethernet/micrel/ksz884x.c | 10 +-
drivers/net/ethernet/microchip/lan743x_main.c | 7 +-
.../ethernet/microchip/sparx5/sparx5_fdma.c | 2 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 20 +-
drivers/net/ethernet/mscc/ocelot.c | 3 +-
drivers/net/ethernet/mscc/ocelot_net.c | 18 +-
.../net/ethernet/myricom/myri10ge/myri10ge.c | 31 +-
drivers/net/ethernet/natsemi/ns83820.c | 13 +-
drivers/net/ethernet/neterion/s2io.c | 32 +-
.../net/ethernet/neterion/vxge/vxge-main.c | 49 +-
.../net/ethernet/netronome/nfp/crypto/tls.c | 12 +-
.../ethernet/netronome/nfp/nfp_net_common.c | 118 +++--
.../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 +--
.../ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 13 +-
.../ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 6 +-
drivers/net/ethernet/pasemi/pasemi_mac.c | 6 +-
.../net/ethernet/pensando/ionic/ionic_lif.c | 125 +++---
.../net/ethernet/pensando/ionic/ionic_txrx.c | 9 +-
.../ethernet/qlogic/netxen/netxen_nic_init.c | 3 +-
.../ethernet/qlogic/netxen/netxen_nic_main.c | 50 ++-
drivers/net/ethernet/qlogic/qede/qede.h | 10 +-
.../net/ethernet/qlogic/qede/qede_ethtool.c | 2 +-
.../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 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 72 +--
.../net/ethernet/qlogic/qlcnic/qlcnic_io.c | 3 +-
.../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 +-
.../ethernet/qualcomm/rmnet/rmnet_map_data.c | 11 +-
.../net/ethernet/qualcomm/rmnet/rmnet_vnd.c | 10 +-
drivers/net/ethernet/realtek/8139cp.c | 39 +-
drivers/net/ethernet/realtek/8139too.c | 28 +-
drivers/net/ethernet/realtek/r8169_main.c | 85 ++--
drivers/net/ethernet/renesas/ravb.h | 4 +-
drivers/net/ethernet/renesas/ravb_main.c | 24 +-
drivers/net/ethernet/renesas/sh_eth.c | 28 +-
drivers/net/ethernet/rocker/rocker_main.c | 3 +-
.../net/ethernet/samsung/sxgbe/sxgbe_main.c | 19 +-
drivers/net/ethernet/sfc/ef10.c | 41 +-
drivers/net/ethernet/sfc/ef100_nic.c | 43 +-
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 | 32 +-
drivers/net/ethernet/sfc/efx_common.c | 41 +-
drivers/net/ethernet/sfc/efx_common.h | 4 +-
drivers/net/ethernet/sfc/falcon/efx.c | 44 +-
drivers/net/ethernet/sfc/falcon/falcon.c | 4 +-
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 | 5 +-
drivers/net/ethernet/sfc/siena.c | 4 +-
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 +-
.../net/ethernet/stmicro/stmmac/dwmac4_core.c | 3 +-
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 62 +--
.../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 +-
.../net/ethernet/synopsys/dwc-xlgmac-common.c | 45 +-
drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c | 20 +-
.../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 +-
.../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/hamradio/bpqether.c | 3 +-
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 | 5 +-
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/ntb_netdev.c | 5 +-
drivers/net/ppp/ppp_generic.c | 2 +-
drivers/net/rionet.c | 3 +-
drivers/net/tap.c | 38 +-
drivers/net/team/team.c | 90 ++--
drivers/net/thunderbolt.c | 10 +-
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 | 19 +-
drivers/net/veth.c | 67 +--
drivers/net/virtio_net.c | 50 ++-
drivers/net/vmxnet3/vmxnet3_drv.c | 75 ++--
drivers/net/vmxnet3/vmxnet3_ethtool.c | 88 ++--
drivers/net/vmxnet3/vmxnet3_int.h | 4 +-
drivers/net/vrf.c | 20 +-
drivers/net/vsockmon.c | 6 +-
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 +-
.../broadcom/brcm80211/brcmfmac/core.c | 4 +-
.../net/wireless/intel/iwlwifi/cfg/22000.c | 4 +-
drivers/net/wireless/intel/iwlwifi/cfg/8000.c | 2 +-
drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 2 +-
.../net/wireless/intel/iwlwifi/dvm/mac80211.c | 7 +-
.../net/wireless/intel/iwlwifi/iwl-config.h | 2 +-
.../net/wireless/intel/iwlwifi/mvm/mac80211.c | 17 +-
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 10 +-
.../net/wireless/mediatek/mt76/mt7615/init.c | 3 +-
.../net/wireless/mediatek/mt76/mt7915/init.c | 3 +-
.../net/wireless/mediatek/mt76/mt7921/init.c | 3 +-
drivers/net/xen-netback/interface.c | 27 +-
drivers/net/xen-netfront.c | 53 ++-
drivers/s390/net/qeth_core.h | 7 +-
drivers/s390/net/qeth_core_main.c | 139 +++---
drivers/s390/net/qeth_l2_main.c | 44 +-
drivers/s390/net/qeth_l3_main.c | 49 +-
drivers/scsi/fcoe/fcoe.c | 14 +-
drivers/staging/octeon/ethernet.c | 5 +-
drivers/staging/qlge/qlge_main.c | 59 +--
drivers/usb/gadget/function/f_phonet.c | 2 +-
include/linux/if_macvlan.h | 2 +-
include/linux/if_tap.h | 2 +-
include/linux/if_vlan.h | 22 +-
include/linux/netdev_features.h | 181 +++++++-
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 | 21 +-
lib/vsprintf.c | 4 +-
net/8021q/vlan.c | 11 +-
net/8021q/vlan.h | 24 +-
net/8021q/vlan_core.c | 6 +-
net/8021q/vlan_dev.c | 57 +--
net/batman-adv/soft-interface.c | 5 +-
net/bridge/br_device.c | 21 +-
net/bridge/br_if.c | 19 +-
net/bridge/br_private.h | 3 +-
net/core/dev.c | 420 ++++++++++--------
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/dccp/ipv4.c | 2 +-
net/dccp/ipv6.c | 7 +-
net/decnet/af_decnet.c | 2 +-
net/decnet/dn_nsp_out.c | 2 +-
net/dsa/slave.c | 24 +-
net/ethtool/features.c | 94 ++--
net/ethtool/ioctl.c | 158 ++++---
net/hsr/hsr_device.c | 40 +-
net/hsr/hsr_forward.c | 11 +-
net/hsr/hsr_framereg.c | 3 +-
net/hsr/hsr_slave.c | 3 +-
net/ieee802154/6lowpan/core.c | 2 +-
net/ieee802154/core.c | 14 +-
net/ipv4/af_inet.c | 5 +-
net/ipv4/esp4_offload.c | 28 +-
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/l2tp/l2tp_eth.c | 2 +-
net/mac80211/iface.c | 10 +-
net/mac80211/main.c | 5 +-
net/mpls/mpls_gso.c | 4 +-
net/netfilter/ipvs/ip_vs_proto_sctp.c | 3 +-
net/nsh/nsh.c | 2 +-
net/openvswitch/datapath.c | 5 +-
net/openvswitch/vport-internal_dev.c | 24 +-
net/phonet/pep-gprs.c | 3 +-
net/sched/sch_cake.c | 6 +-
net/sched/sch_netem.c | 6 +-
net/sched/sch_taprio.c | 6 +-
net/sched/sch_tbf.c | 6 +-
net/sctp/offload.c | 12 +-
net/sctp/output.c | 2 +-
net/sunrpc/sunrpc.h | 2 +-
net/tls/tls_device.c | 10 +-
net/wireless/core.c | 14 +-
net/xfrm/xfrm_device.c | 31 +-
net/xfrm/xfrm_interface.c | 6 +-
net/xfrm/xfrm_output.c | 4 +-
424 files changed, 6584 insertions(+), 4459 deletions(-)
--
2.33.0
7
178
Patch 1: disable dma mapping support for 32-bit arch with 64-bit
DMA.
Patch 2 & 3: pp page frag tracking support
The small packet drop test show no notiable performance degradation
when page pool is disabled.
V4:
1. Change error code to EOPNOTSUPP in patch 1.
2. Drop patch 2.
3. Use pp_frag_count to indicate if a pp page can be tracked,
to avoid breaking the mlx5 driver.
V3:
1. add patch 1/4/6/7.
2. use pp_magic to identify pp page uniquely too.
3. avoid unnecessary compound_head() calling.
V2: add patch 2, adjust the commit log accroding to the discussion
in V1, and fix a compiler error reported by kernel test robot.
Yunsheng Lin (3):
page_pool: disable dma mapping support for 32-bit arch with 64-bit DMA
page_pool: change BIAS_MAX to support incrementing
skbuff: keep track of pp page when pp_frag_count is used
include/linux/mm_types.h | 13 +------------
include/linux/skbuff.h | 30 ++++++++++++++++++++----------
include/net/page_pool.h | 36 ++++++++++++++++++++++++------------
net/core/page_pool.c | 29 +++++++++--------------------
net/core/skbuff.c | 10 ++++++++--
5 files changed, 62 insertions(+), 56 deletions(-)
--
2.33.0
3
6
How are you doing?
I want to share a message that has been spreading all over the
internet that concerns the times we are living in. Whether you believe
in God or not, this is a must read message!
We can see throughout time how we have been slowly conditioned to come
to this point where we are on the verge of a cashless society. Would
it surprise you to know that the Bible foretold of this event? Don't
believe me? This may be the most imporant message you will read in
these times...please do not ignore this!
This messsage reveals what the Mark of the Beast is, and the meaning
behind counting a number people have been pondering for centuries,
666. This message also shares why Barack Obama is the Antichrist as
well as the gospel message. This is truly a message from God!
In the Revelation of Jesus Christ given to the apostle John, we read:
...."And he (the false prophet who deceives many by his miracles)
causeth all, both small and great, rich and poor, free and bond, to
receive a mark in their right hand, or in their foreheads:
And that no man might buy or sell, save he that had the mark, or the
name of the beast, or the number of his name.
Here is wisdom. Let him that hath understanding count the number of
the beast: for it is the number of a man; and his number is Six
hundred threescore and six" (Revelation 13:16-18 BRG).....
Referring to the last generation, this could only be speaking of a
cashless society. Why? Revelation 13:17 tells us that we cannot buy or
sell unless we receive the mark of the beast. If physical money was
still in use, we could buy or sell with one another without receiving
the mark. This would contradict scripture. So, it deduces itself to
this conclusion.
These verses could not be referring to something spiritual as
scripture references two physical locations (our right-hand or
forehead) stating the mark will be on one "OR" the other. It once
again deduces itself to this conclusion.
Also, how could you determine who truly has a spiritual mark so that
they may buy or sell? And, as you will read further in this message,
to have the mark of the beast is the same to have the name of the
beast, and the number of its name. You will begin to see even more
clearly why this mark cannot be something purely spiritual.
Here is where it really starts to come together. It is shocking how
accurate the Bible is concerning the RFID microchip. These are notes
from a man named Carl Sanders who worked with a team of engineers to
help develop this microchip in the late 1960's.
Carl Sanders attended 17 New World Order meetings with heads-of-state
officials such as Henry Kissinger and Bob Gates of the CIA to talk
about plans on how to bring forth this one-world system. The US
government commissioned Carl Sanders to design a microchip for
identifying and controlling the peoples of the nations-a microchip
that could be inserted under the skin with a hypodermic needle (a
quick, convenient procedure that would be gradually accepted by the
people).
Carl Sanders, along with a team of engineers with him, with U.S. grant
monies supplied by tax dollars, took on this mission and designed a
microchip which is powered by a lithium battery, rechargeable with the
aid of the temperature changes in our skin. With out the knowledge of
the holy Bible (Mr. Sanders was not a Christian at the time), these
engineers spent one and a half million dollars gathering information
on the best and most convenient spot to have the microchip placed
under the skin.
These researchers found that the forehead and the back of the hand
(the two spots Revelation says the mark will be received) aren't just
the most convenient places, however are also the only viable spots for
constant, consistent temperature changes in the skin to recharge the
lithium battery. The microchip is about 7 millimeters in length, .75
millimeters in diameter, about the size of a grain of rice. It is
capable of containing many pages of data about you. All your basic
information, work information, crime history, health history, and
financial history could be stored on this chip.
Carl Sanders believes that this microchip, which he remorsefully
helped engineer, is the "beast's mark" spoke of in Revelation
13:16-18. The original Greek word for "mark" is "charagma," which
means a "scratch or etching." Additionally it is fascinating to note
that the number 666 is actually a word in the original Greek language.
That word is "chi xi stigma," with the final word, "stigma," also
meaning "to stick or prick. Mr. Sanders believes that is referring to
the usage of a hypodermic needle being poked into the human flesh to
insert the microchip."
Mr. Sanders asked a Boston Medical Center doctor what would happen if
the lithium contained within the RFID microchip leaked into the body.
The doctor responded that if the microchip broke inside a human body,
the lithium would cause a severe and painful wound filled with pus.
This is what the book of Revelation says:
"And the first (angel) went, and poured out his bowl into the earth;
and it became a noisome and grievous sore upon the men that had the
mark of the beast, and that worshipped his image" (Revelation 16:2
ASV).
THE HIDDEN MEANING BEHIND THE NUMBER 666 REVEALED!
What I first want to mention, before I share what the Holy Spirit has
revealed to me concerning the number of the beast, is that God
confirms in threes. We can see this throughout scripture:
"For there are three that bear witness in heaven: the Father, the
Word, and the Holy Spirit; and these three are one" (1 John 5:7 NKJV).
"and that He was buried, and that He rose again the third day
according to the Scriptures" (1 Corinthians 15:4 NKJV).
"...Holy, holy, holy, Lord God Almighty, Who was and is and is to
come!" (Revelation 4:8 NKJV).
There are many more examples, but I thought I would just share three
of them to make the point.
Examining Revelation 13:16,17,18, the first group of three I would
like to point out is that the mark of the beast is described in three
separate verses, 16, 17 and 18.
The next three I see is in verse 16, "He causes all..." is followed by
three contrasting categories of people,
1 - "both small and great,
2 - rich and poor,
3 - free and slave...".
Then unto verse 17, it opens with, "and that no one may buy or sell
except one who has...", followed by three explanations of what one
must have to buy or sell,
1 - "...the mark
2 - or the name of the beast,
3 - or the number of his name".
Now unto verse 18, we read "Let him who has understanding
calculate...", which is followed by,
1 - "the number of the beast,
2 - for it is the number of a man:
3 - His number is 666".
The last three I see is the number "6" being used three times in a
row. The reason I'm making this point about God confirming in three is
because it is the key to unlocking how to calculate the number 666.
Throughout the centuries there have been people trying to calculate
numbers based on titles and names that come up to the number 666 to
identify one person, the Antichrist; but from Revelation 13:18, I do
not see where God is telling us to count up to 666, but rather to
count the number of the beast. This number is identified as 666. So
the verse is telling us to count the number 666.
What does it mean to count? It means to add up. So how could we add up
666? Remember my previous point about God confirming in threes is key
to unlocking the number 666. So logically, what would be the best way
to count the number 666? To count it equally by using the rule of
three based off the number.
We cannot count it equally as 600+60+6, this would also bring us back
to the start.
We cannot count it as 600+600+600, or 60+60+60 because there are no
zeroes in between or at the end of 666.
The only logical option is 6+6+6=18.
What is interesting is that the verse that reveals for us to count the
number itself is verse 18 (there a total of 18 verses in Revelation
Chapter 13), being the third verse out of the three verses that
describe the mark of the beast in Revelation 13:16,17,18. What is 18
divided by 3? 6. So 3x6=18, or 6+6+6=18.
Another interesting point is the only two other combinations (making a
total of three possible combinations) for placing a "+" symbol in
between 666 are:
• 66+6=72 and 6+66=72.
• Add both 72's together and you get 144.
Why the number 144 is worth our attention is because the verse
following Revelation 13:18 is the first time in the Bible where the
144,000 are being described in detail:
"Then I looked, and behold, a Lamb standing on Mount Zion, and with
Him one hundred and forty-four thousand, having His Father’s name
written on their foreheads..." (Revelation 14:1).
Now if you add up all three numbers from counting 666 by moving the
"+" symbol around, it would be 72+72+18=162. What is compelling about
the number 162, is, if you divide 144,000 by 162, you get 888. The
name of Jesus in Greek gematria adds up to 888. The New Testament was
originally written in the Greek language. Revelation 14:1 not only
mentions the 144,000, but also the Lamb who is Jesus.
Now what is interesting about the number for Jesus, 888, is that if
you apply the same formula that was used to count 666, you get
8+8+8=24. Why the number 24? Revelation chapter 4 tells us there are
24 elders seated around the throne of God. This is the same throne
where Jesus sits.
Now if you take:
• 8+8+8=24
• 8+88=96
• 88+8=96
you get 24+96+96=216.
Take 144,000 divided by 216 and you get 666.
Remember that this was the same exact formula we used to count the
number 666 that ultimately brought forth the number 888.
Here is a quick recap to demonstrate how this formula confirms itself
as being the true way to count 666:
1: 6+6+6=18 » 66+6=72 » 6+66=72 » 18+72+72=162
2: 144,000 divided by 162=888
3: 8+8+8=24 » 88+8=96 » 8+88=96 » 24+96+96=216
4: 144,000 divided by 216=666
1: 6+6+6=18 » 66+6=72...
As you can see, it is perpetual. And remember that we consistently
used a formula that worked in threes being the number that God uses
for confirmation.
By utilizing the same formulation of counting by including the plus
symbol in between the numbers, why do all these numbers relate in such
a manner?
The book of Revelation contains the use of the number 7 in various
forms. For instance 7 seals, 7 trumpets, and 7 bowls. What is
interesting about the number 37 (three sevens) is if if you divide any
number that contains the same single digit three times in a row, such
as 111 to 999, it comes out to the value of if you were to add all
three numbers up. For example 888 divided by 37 equals 24. So
8+8+8=24. Or 666 divided by 37 equals 18. So 6+6+6=18. Could this be
another way of God's word confirming itself that the mystery behind
calculating the number 666 indeed is 18?
Another fascinating factor to note is that if you add up all the
numbers from 1 to 36 (1+2+3...+36), it totals 666. The number 36, as
in three sixes? May this be a hint that we need to add up three sixes
as opposed to perceiving the number as six-hundred sixty six?
So what may this suggest? We know in this world we are identified by
numbers in numerous forms. Starting from our birth certificate to our
social security card, also with our drivers license, being identified
based on a system of ruler ship. So it's possible that this RFID
microchip will contain a brand new identification that has a total of
18 characters.
"here the wisdom is, the one having the mind let him calculate the
number of the wild beast, number for "of human" it is, and the number
of it 666" (Revelation 13:1, Greek Translation).
The Greek word "anthrōpos" being used in verse 18 where it says "of
human" is the Greek strongs concordance G444. The first two
definitions of the word are "a human being, whether male or female",
and, "generically, to include all human individuals". Could the number
of the beast apply to all mankind?
In the Greek (the New Testament was originally written in the Greek
language), and other translations, you will notice the beast is
described as an "it", instead of "him". The reason I'm making this
point is because when a translation says "His number is 666", this
would imply a singular person, the Antichrist. But by saying "the
number of it 666", implies that it is of the beast system as a whole.
We can know the number of the beast cannot be to identify products
(like a new barcode) to buy or sell because scripture says we cannot
buy or sell without the number of the beast. What am I getting at?
There will be instances where you could buy something someone made
themselves and it wouldn't have a store branded identification on it.
But for this number to be in our chips, that is where it must be to
conclude ultimately that we cannot buy or sell without having the
number of the beast. As previously mentioned in Revelation 13:18, the
number of the beast (6+6+6=18) is a "human number", definition
"generically, to include all human individuals".
May this be the identification of the beast, the number of its name?
The one-world beast system which is identified by 18 characters? This
might fit the scriptures that speaks of a mark that we ought to have
to buy or sell in our right-hand or forehead, and that it also
incorporates the number of the beast, during a future cashless money
society.
Here is another mathematical confirmation: 144,000 divided by 6,
divided by 6, divided by 6 (6,6,6) equals 666. To see many more of
these amazing calculations, read the article about the RFID Mark of
the Beast and the number 666...
Do we believe blind forces gave us eyes to see? That deaf forces gave
us ears to hear? That careless forces gave us a heart to care for
others? That faithless forces uphold the universe and all the laws
that govern it and that is why we should trust them? That mindless
forces gave us a mind to think and comprehend these things? If there
is a God, He must be personal, because we as His creation are personal
beings. How do we get to personally know anybody? By their word...The
words of Jesus have been translated into over 2,000 languages, and
nothing comes remotely close (the Quran about 110). If that is not
God's word, nothing is. Why? Why would a personal loving God who
desires for us to know Him, who is all powerful, allow man to create a
word far surperior than His to be spread around the world throughout
time in so many different languages to deceive the world so we may not
know the truth about Him?
God has shown me some time ago that Trump will have a second term (he
will be back soon!), and that this will be the time where the two
witnesses of Revelation 11 will rise up (who are the 144,000) to
prophesy for 42 months to every tribe, tongue, nation and people
before the beast rises from the sea in Revelation 13. We will see His
Holy Spirit move across the world in a mighty way bringing a great
multitude to God. God gave me a vision that Obama will be back in
2024.
To see much more, go to: http://go.bible-woke.org
[http://k12-us-teachers.live/index.php/campaigns/[CAMPAIGN_UID/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…
[http://k12-us-teachers.live/index.php/campaigns/fy214lwwf4d70/track-url/xy1…]]
to see all the proof!
If you feel led to, please forward this email to your friends and
family so they may know that God is moving in these times in mighty
ways, even through His prophets to proclaim the truth of His word to
the ends of the earth. God bless!
"Why did the Biden campaign choose 30330? 2020 divided by 666 = 3.0330
Who believes this to be a coincidence? October 2020 Isaiah 53:6
Someone said we are being whipsawed in 2020. Truly a great division is
taking place between good and evil—both symbolically and literally
(riots, unrest, politics). If you take the current year 2020 and
divide it by the number 666 (known for its satanic implications) you
will get the number 30330 (repeated). This number 30330 happens to be
the number used to vote for Joe Biden and Kamala Harris. Freaky?
Supernatural? Odd for sure. Whatever this means, it doesn’t seem
good to me. First, why would anyone knowingly choose those particular
numbers for their campaign? If they weren’t knowingly chosen, then
it appears to be a supernatural act by the evil one himself and I
would want to change those numbers ASAP. And if the numbers were
chosen knowing their significance, are you satanic? Is this campaign
satanic? Either way I do not believe this is a coincidence. And one
thing is certain, 2020 is truly being divided by Satan. He is the
master deceiver and spreader of chaos. Jesus calls him the father of
lies."
So I looked up this number 30330 concerning Joe Biden, and I found
this information:
If you send a text to that number (at that time), you would get a
response asking to support Joe's campaign to take down Donald Trump,
with one part in caps saying "CHIP IN >>" pointing to a link to go and
donate.
"CHIP IN"? Obama has used this phrase in the past on his twitter and
people believe it is a subliminal message to receive the mark of the
beast, that is to say the implantable RFID microCHIP that will go IN
our body.
God's word warns us in the end times that a false prophet will stand
up doing miraculous signs to deceive many to acquire the beasts mark:
...."And the beast was taken, and with him the false prophet that
wrought the signs in his sight, wherewith he deceived them that had
received the mark of the beast and them that worshipped his image:
they two were cast alive into the lake of fire that burneth with
brimstone" (Revelation 19:20 ASV)....
At all costs, DO NOT TAKE IT!
"Then a third angel followed them, saying with a loud voice, "If
anyone worships the beast and his image, and receives his mark on his
forehead or on his hand, he himself shall also drink of the wine of
the wrath of God, which is poured out full strength into the cup of
His indignation. He shall be tormented with fire and brimstone in the
presence of the holy angels and in the presence of the Lamb. And the
smoke of their torment ascends forever and ever; and they have no rest
day or night, who worship the beast and his image, and whoever
receives the mark of his name" (Revelation 14:9-11).
We're living in very prophetic times with major Biblical prophecies
coming to pass.
When Donald Trump recognized Jerusalem as capital of Israel on
December 6 2017, this was a big step to bring forth the Third Temple
prophesied in the Bible.
God's Holy scriptures tells us that the Antichrist will seat himself
in this temple:
"...and the man of sin is revealed, the son of perdition, who opposes
and exalts himself above all that is called God or that is worshiped,
so that he sits as God in the temple of God, showing himself that he
is God" (2 Thessalonians 2:3-4).
Within the Islamic faith, there is a figure called the Mahdi, referred
to as their messiah who they're awaiting to appear. There are many
testimonies from individuals on line who consider this man will be
Barack Obama who may be the biblical Antichrist. I myself have had
unusual dreams (you can read them in my article on the website above)
concerning Barack. He came on stage claiming to be a follower of
Christ with no affiliation to the Muslim religion, however it was
later revealed by his circle of relatives that he indeed is a
religious Muslim.
So what's in the name? The meaning of someones name can say a lot
about a person. God throughout history has given names to people that
have a specific meaning tied to their lives. How about the name Barack
Obama? Let us take a look at what may be hiding beneath the surface...
Jesus says, "And He said to them, 'I saw Satan fall like lightning
from heaven'" (Luke 10:18).
In Hebrew, the word "Barack" means "lighting", and the use of "Bama"
(Strongs Hebrew word 1116) is used to mean the "heights" of heaven.
The day after the election of Barack Obama (11/04/08), the triumphing
pick three lotto numbers in Illinois (Obama’s home state) for
11/5/08 were 666.
Obama was a U.S. senator for Illinois, and his zip code was 60606.
The names of both of Obama's daughters are Malia and Natasha. If we
were to write those names backwards we would get "ailam ahsatan". Now
if we remove the letters that spell "Alah" (Allah being the God of
Islam), we get "I am Satan". Coincidence? I don't think so.
These are just a few of many evidences why Barack Obama is the
Antichrist. You can see many more in my article on the website above,
as well as read about the dreams I've had concerning this man. I'm
more than convinced that God has shown me that he is without a doubt
the Antichrist, and we will see him rise to power in the not so
dinstant future.
Why do we need Jesus?
"for all have sinned and fall short of the glory of God" (Romans
2:23).
"For the wages of sin is death, but the gift of God is eternal life in
Christ Jesus our Lord" (Romans 6:23).
Our good works cannot save our souls. If we step in front of a judge,
being responsible for committing a crime, the judge is not going to
judge us by the good that we have accomplished, rather the crimes we
have committed. If we as fallen humanity, created in God's image, pose
this type of justice, how much more a perfect, righteous, and Holy
God?
God has introduced to us His moral law's by the ten commandments
handed to Moses at Mt. Siani. These legal guidelines were not given so
we can be justified, but in order that we might see the need for our
saviour. They're the mirror of God's character of what He has put in
each and every one of us, with our conscious bearing witness that we
know that it's wrong to steal, lie, dishonor our mother and father,
and so on.
We may attempt to follow all the moral laws of the ten commandments,
but we will never catch up to them to be justified before a Holy God.
That same word of the law received by Moses was brought forth as flesh
over 2000 years ago in the body of Jesus Christ. He came to be our
justification by perfectly fulfilling the commandments of God, living
a sinless life that solely God may accomplish.
The distance between us and the law of God can never be reconciled by
our own merit, however the arm of Jesus is stretched out by the grace
and mercy of God. And if we are to grab on, by faith in Him, He'll
pull us forward being the one to justify us. As in the court of law,
if someone steps in and pays your debt, despite the fact that you're
guilty, the judge can do what is legal and just and set you free. That
is what Jesus did almost 2000 years ago on the cross. It was a legal
transaction being fulfilled in the spiritual realm by the shedding of
His blood, with His last words being, "...It is finished!..." (John
19:30).
So why did Jesus have to die for us?
Because God is Holy and just, the wrath that we deserve could not be
overlooked. Through the perfect righteousness and justice of God's
character, it ought to be reconciled, it ought to be quenched and
satisfied.
For God takes no pleasure in the demise of the wicked (Ezekiel 18:23).
That is why in Isaiah chapter 53, where it speaks of the coming
Messiah and His soul being a sacrifice for our sins, why it says it
pleased God to crush His only begotten Son.
That is because the wrath that we deserve was justified by being
poured out upon His Son. For if it was poured out upon us who have
earned it, we'd all die and go to hell. God created a means of escape
by pouring it out on His Son who's soul could not be left in Hades,
but was raised and seated at the right hand of God in power.
Now after we put on the Lord Jesus Christ (Romans 13:14), God no
longer see's the person who deserves His wrath, but the glorious image
of His perfect Son dwelling in us, justifying us as if we acquired the
wrath we deserve, making a means of escape from the curse of death.
Now what we ought to do is repent and believe in the saviour,
confessing and turning from our sins. That is not just a head
knowledge of believing in Jesus, but rather receiving His words,
taking them to heart. Where we no longer live to practice sin, but
turn from our sins and practice righteousness:
"Do you not know that the unrighteous will not inherit the kingdom of
God? Do not be deceived. Neither fornicators, nor idolaters, nor
adulterers, nor homosexuals, nor sodomites, nor thieves, nor covetous,
nor drunkards, nor revilers, nor extortioners will inherit the kingdom
of God. And such were some of you. But you were washed, but you were
sanctified, but you were justified in the name of the Lord Jesus and
by the Spirit of our God" (1 Corinthians 6:9-11).
By doing so we will become transformed into the image of God by faith
in His Son Christ Jesus Who's willing to give the Holy Spirit to those
that ask of Him:
"Most assuredly, I (Jesus) say to you, unless one is born of water and
the Spirit, he cannot enter the kingdom of God. That which is born of
the flesh is flesh, and that which is born of the Spirit is spirit. Do
not marvel that I said to you, 'You must be born again.' (John 3:5-6).
"But you are not in the flesh but in the Spirit, if indeed the Spirit
of God dwells in you. Now if anyone does not have the Spirit of
Christ, he is not His" (Romans 8:9).
What are you waiting for? Our Father in heaven only wants the best for
us all, restoring all the pieces this world has stolen from us. That
is what it means to be "holy". To be made whole.
He's waiting to listen to you. That God given tongue to speak
language, by way of faith, pray to Him, ask Him to forgive you by
confessing to Him your sins and be willing to forsake them; that you
accept the sacrifice of His Son Jesus on the cross, and that you want
His Holy Spirit living inside you transforming you into a child of
God.
Jesus says, "but whoever drinks of the water that I shall give him
(the Holy Spirit) will never thirst. But the water that I shall give
him will become in him a fountain of water springing up into
everlasting life."
Did you realize that Jesus spoke more about hell than any one in God's
holy word, even more than He spoke about heaven?! For this very
purpose He came to die for us, to save us from this place that we
earned by our sins against a holy God.
He describes hell as a real place where,
"Their worm does not die
And the fire is not quenched" (Mark 9:44).
And where,
"There will be weeping and gnashing of teeth..." (Luke 13:28).
Jesus tells us who to fear,
"And do not fear those who kill the body but cannot kill the soul. But
rather fear Him who is able to destroy both soul and body in hell"
(Matthew 10:28).
"Now I saw a new heaven and a new earth, for the first heaven and the
first earth had passed away. Also there was no more sea. Then I, John,
saw the holy city, New Jerusalem, coming down out of heaven from God,
prepared as a bride adorned for her husband. And I heard a loud voice
from heaven saying, 'Behold, the tabernacle of God is with men, and He
will dwell with them, and they shall be His people. God Himself will
be with them and be their God. And God will wipe away every tear from
their eyes; there shall be no more death, nor sorrow, nor crying.
There shall be no more pain, for the former things have passed away.'
Then He who sat on the throne said, 'Behold, I make all things new.'
And He said to me, 'Write, for these words are true and faithful.'
And He said to me, 'It is done! I am the Alpha and the Omega, the
Beginning and the End. I will give of the fountain of the water of
life freely to him who thirsts. He who overcomes shall inherit all
things, and I will be his God and he shall be My son. But the
cowardly, unbelieving, abominable, murderers, sexually immoral,
sorcerers, idolaters, and all liars shall have their part in the lake
which burns with fire and brimstone, which is the second death.'"
(Revelation 21:1-8).
1
0
Patch 1: disable dma mapping support for 32-bit arch with 64-bit
DMA.
Patch 2: support non-split page when PP_FLAG_PAGE_FRAG is set.
patch 3: avoid calling compound_head() for skb frag page
Patch 4-7: use pp_magic to identify pp page uniquely.
V3:
1. add patch 1/4/6/7.
2. use pp_magic to identify pp page uniquely too.
3. avoid unnecessary compound_head() calling.
V2: add patch 2, adjust the commit log accroding to the discussion
in V1, and fix a compiler error reported by kernel test robot.
Yunsheng Lin (7):
page_pool: disable dma mapping support for 32-bit arch with 64-bit DMA
page_pool: support non-split page with PP_FLAG_PAGE_FRAG
pool_pool: avoid calling compound_head() for skb frag page
page_pool: change BIAS_MAX to support incrementing
skbuff: keep track of pp page when __skb_frag_ref() is called
skbuff: only use pp_magic identifier for a skb' head page
skbuff: remove unused skb->pp_recycle
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 6 ---
drivers/net/ethernet/marvell/mvneta.c | 2 -
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 4 +-
drivers/net/ethernet/marvell/sky2.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 2 +-
drivers/net/ethernet/ti/cpsw.c | 2 -
drivers/net/ethernet/ti/cpsw_new.c | 2 -
include/linux/mm_types.h | 13 +-----
include/linux/skbuff.h | 39 ++++++++----------
include/net/page_pool.h | 31 ++++++++------
net/core/page_pool.c | 40 +++++++------------
net/core/skbuff.c | 36 ++++++-----------
net/tls/tls_device.c | 2 +-
13 files changed, 67 insertions(+), 114 deletions(-)
--
2.33.0
3
25
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 necessary 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 167 patches to 5 parts.
patch 1~22: convert the prototype which use netdev_features_t
as return value
patch 24: introduce fake helpers for bitmap operation
patch 25~165: use netdev_feature_xxx helpers
patch 166: use macro __DECLARE_NETDEV_FEATURE_MASK to replace
netdev_feature_t declaration.
patch 167: change the type of netdev_features_t to bitmap,
and rewrite the bitmap helpers.
Jian Shen (167):
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
net: tls: 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: mpls: use netdev feature helpers
net: nsh: use netdev feature helpers
net: decnet: use netdev feature helpers
net: dccp: use netdev feature helpers
net: l2tp: use netdev feature helpers
net: ntb_netdev: use netdev feature helpers
net: thunderbolt: use netdev feature helpers
net: phonet: use netdev feature helpers
net: vrf: use netdev feature helpers
net: sctp: 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: caif: 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: rionet: use netdev feature helpers
net: gtp: use netdev feature helpers
net: vsockmon: 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
scsi: fcoe: use netdev feature helpers
net: ipvs: use netdev feature helpers
net: xfrm: use netdev feature helpers
net: cirrus: use netdev feature helpers
net: ec_bhf: use netdev feature helpers
net: hamradio: use netdev feature helpers
net: batman: use netdev feature helpers
net: ieee802154: use netdev feature helpers
test_bpf: change the prototype of features
net: openvswitch: use netdev feature helpers
firewire: use netdev feature helpers
staging: qlge: use netdev feature helpers
staging: octeon: 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/firewire/net.c | 3 +-
drivers/infiniband/hw/hfi1/vnic_main.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 21 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 2 +-
drivers/net/bareudp.c | 16 +-
drivers/net/bonding/bond_main.c | 136 +++---
drivers/net/bonding/bond_options.c | 12 +-
drivers/net/caif/caif_serial.c | 2 +-
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 +-
.../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 +-
.../net/ethernet/apm/xgene/xgene_enet_main.c | 21 +-
.../ethernet/aquantia/atlantic/aq_filters.c | 12 +-
.../ethernet/aquantia/atlantic/aq_macsec.c | 2 +-
.../net/ethernet/aquantia/atlantic/aq_main.c | 27 +-
.../net/ethernet/aquantia/atlantic/aq_nic.c | 28 +-
.../net/ethernet/aquantia/atlantic/aq_nic.h | 2 +-
.../net/ethernet/aquantia/atlantic/aq_ring.c | 3 +-
.../aquantia/atlantic/hw_atl/hw_atl_b0.c | 3 +-
drivers/net/ethernet/atheros/alx/main.c | 23 +-
.../net/ethernet/atheros/atl1c/atl1c_main.c | 33 +-
.../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 +-
.../net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 67 +--
.../net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 3 +-
.../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 +-
.../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 +-
.../net/ethernet/cavium/liquidio/lio_core.c | 6 +-
.../net/ethernet/cavium/liquidio/lio_main.c | 95 ++--
.../ethernet/cavium/liquidio/lio_vf_main.c | 79 ++--
.../net/ethernet/cavium/thunder/nicvf_main.c | 50 ++-
.../ethernet/cavium/thunder/nicvf_queues.c | 2 +-
drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 50 ++-
drivers/net/ethernet/chelsio/cxgb/sge.c | 12 +-
.../net/ethernet/chelsio/cxgb3/cxgb3_main.c | 60 ++-
drivers/net/ethernet/chelsio/cxgb3/sge.c | 10 +-
.../net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c | 16 +-
.../net/ethernet/chelsio/cxgb4/cxgb4_main.c | 88 ++--
.../net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.h | 3 +-
drivers/net/ethernet/chelsio/cxgb4/sge.c | 14 +-
.../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/cirrus/ep93xx_eth.c | 2 +-
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/ec_bhf.c | 2 +-
drivers/net/ethernet/emulex/benet/be_main.c | 68 +--
drivers/net/ethernet/ethoc.c | 2 +-
drivers/net/ethernet/faraday/ftgmac100.c | 38 +-
.../net/ethernet/freescale/dpaa/dpaa_eth.c | 23 +-
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 44 +-
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 5 +-
drivers/net/ethernet/freescale/enetc/enetc.c | 34 +-
.../net/ethernet/freescale/enetc/enetc_pf.c | 38 +-
.../net/ethernet/freescale/enetc/enetc_qos.c | 2 +-
.../net/ethernet/freescale/enetc/enetc_vf.c | 16 +-
drivers/net/ethernet/freescale/fec_main.c | 29 +-
.../ethernet/freescale/fs_enet/fs_enet-main.c | 2 +-
drivers/net/ethernet/freescale/gianfar.c | 39 +-
.../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 ++-
.../net/ethernet/hisilicon/hns3/hns3_enet.c | 109 +++--
.../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 | 69 +--
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 +-
.../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 | 130 +++---
drivers/net/ethernet/intel/ixgb/ixgb_main.c | 49 +-
.../net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 3 +-
.../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 +++++----
.../net/ethernet/intel/ixgbe/ixgbe_sriov.c | 6 +-
drivers/net/ethernet/intel/ixgbevf/ipsec.c | 9 +-
.../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 +-
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 73 +--
.../marvell/octeontx2/nic/otx2_common.c | 3 +-
.../marvell/octeontx2/nic/otx2_ethtool.c | 4 +-
.../ethernet/marvell/octeontx2/nic/otx2_pf.c | 85 ++--
.../marvell/octeontx2/nic/otx2_txrx.c | 8 +-
.../ethernet/marvell/octeontx2/nic/otx2_vf.c | 35 +-
.../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 | 68 +--
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +-
.../net/ethernet/mellanox/mlx4/en_ethtool.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_main.c | 8 +-
.../net/ethernet/mellanox/mlx4/en_netdev.c | 198 +++++----
.../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 +-
.../mellanox/mlx5/core/en_accel/ipsec.c | 18 +-
.../mellanox/mlx5/core/en_accel/ipsec_rxtx.h | 15 +-
.../mellanox/mlx5/core/en_accel/ktls.c | 14 +-
.../mellanox/mlx5/core/en_accel/tls.c | 16 +-
.../net/ethernet/mellanox/mlx5/core/en_arfs.c | 6 +-
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 3 +-
.../net/ethernet/mellanox/mlx5/core/en_fs.c | 3 +-
.../net/ethernet/mellanox/mlx5/core/en_main.c | 250 ++++++-----
.../net/ethernet/mellanox/mlx5/core/en_rep.c | 25 +-
.../net/ethernet/mellanox/mlx5/core/en_rx.c | 9 +-
.../net/ethernet/mellanox/mlx5/core/en_tc.c | 2 +-
.../ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 19 +-
.../net/ethernet/mellanox/mlxsw/spectrum.c | 36 +-
drivers/net/ethernet/micrel/ksz884x.c | 10 +-
drivers/net/ethernet/microchip/lan743x_main.c | 7 +-
.../ethernet/microchip/sparx5/sparx5_fdma.c | 2 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 20 +-
drivers/net/ethernet/mscc/ocelot.c | 3 +-
drivers/net/ethernet/mscc/ocelot_net.c | 18 +-
.../net/ethernet/myricom/myri10ge/myri10ge.c | 31 +-
drivers/net/ethernet/natsemi/ns83820.c | 13 +-
drivers/net/ethernet/neterion/s2io.c | 32 +-
.../net/ethernet/neterion/vxge/vxge-main.c | 49 +-
.../net/ethernet/netronome/nfp/crypto/tls.c | 12 +-
.../ethernet/netronome/nfp/nfp_net_common.c | 117 +++--
.../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 +--
.../ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 13 +-
.../ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 6 +-
drivers/net/ethernet/pasemi/pasemi_mac.c | 6 +-
.../net/ethernet/pensando/ionic/ionic_lif.c | 125 +++---
.../net/ethernet/pensando/ionic/ionic_txrx.c | 9 +-
.../ethernet/qlogic/netxen/netxen_nic_init.c | 3 +-
.../ethernet/qlogic/netxen/netxen_nic_main.c | 50 ++-
drivers/net/ethernet/qlogic/qede/qede.h | 10 +-
.../net/ethernet/qlogic/qede/qede_ethtool.c | 2 +-
.../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 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 72 +--
.../net/ethernet/qlogic/qlcnic/qlcnic_io.c | 3 +-
.../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 +-
.../ethernet/qualcomm/rmnet/rmnet_map_data.c | 11 +-
.../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.h | 4 +-
drivers/net/ethernet/renesas/ravb_main.c | 24 +-
drivers/net/ethernet/renesas/sh_eth.c | 28 +-
drivers/net/ethernet/rocker/rocker_main.c | 3 +-
.../net/ethernet/samsung/sxgbe/sxgbe_main.c | 19 +-
drivers/net/ethernet/sfc/ef10.c | 41 +-
drivers/net/ethernet/sfc/ef100_nic.c | 43 +-
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 | 32 +-
drivers/net/ethernet/sfc/efx_common.c | 41 +-
drivers/net/ethernet/sfc/efx_common.h | 4 +-
drivers/net/ethernet/sfc/falcon/efx.c | 44 +-
drivers/net/ethernet/sfc/falcon/falcon.c | 4 +-
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 | 5 +-
drivers/net/ethernet/sfc/siena.c | 4 +-
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 +-
.../net/ethernet/stmicro/stmmac/dwmac4_core.c | 3 +-
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 62 +--
.../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 +-
.../net/ethernet/synopsys/dwc-xlgmac-common.c | 45 +-
drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c | 20 +-
.../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 +-
.../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/hamradio/bpqether.c | 3 +-
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 | 5 +-
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/ntb_netdev.c | 5 +-
drivers/net/ppp/ppp_generic.c | 2 +-
drivers/net/rionet.c | 3 +-
drivers/net/tap.c | 38 +-
drivers/net/team/team.c | 90 ++--
drivers/net/thunderbolt.c | 10 +-
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 | 50 ++-
drivers/net/vmxnet3/vmxnet3_drv.c | 75 ++--
drivers/net/vmxnet3/vmxnet3_ethtool.c | 88 ++--
drivers/net/vmxnet3/vmxnet3_int.h | 4 +-
drivers/net/vrf.c | 20 +-
drivers/net/vsockmon.c | 6 +-
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 +-
.../broadcom/brcm80211/brcmfmac/core.c | 4 +-
.../net/wireless/intel/iwlwifi/cfg/22000.c | 4 +-
drivers/net/wireless/intel/iwlwifi/cfg/8000.c | 2 +-
drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 2 +-
.../net/wireless/intel/iwlwifi/dvm/mac80211.c | 7 +-
.../net/wireless/intel/iwlwifi/iwl-config.h | 2 +-
.../net/wireless/intel/iwlwifi/mvm/mac80211.c | 17 +-
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 10 +-
.../net/wireless/mediatek/mt76/mt7615/init.c | 3 +-
.../net/wireless/mediatek/mt76/mt7915/init.c | 3 +-
.../net/wireless/mediatek/mt76/mt7921/init.c | 3 +-
drivers/net/xen-netback/interface.c | 27 +-
drivers/net/xen-netfront.c | 53 ++-
drivers/s390/net/qeth_core.h | 7 +-
drivers/s390/net/qeth_core_main.c | 139 +++---
drivers/s390/net/qeth_l2_main.c | 44 +-
drivers/s390/net/qeth_l3_main.c | 49 +-
drivers/scsi/fcoe/fcoe.c | 14 +-
drivers/staging/octeon/ethernet.c | 5 +-
drivers/staging/qlge/qlge_main.c | 59 +--
drivers/usb/gadget/function/f_phonet.c | 2 +-
include/linux/if_macvlan.h | 2 +-
include/linux/if_tap.h | 2 +-
include/linux/if_vlan.h | 22 +-
include/linux/netdev_features.h | 181 +++++++-
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 | 21 +-
lib/vsprintf.c | 4 +-
net/8021q/vlan.c | 11 +-
net/8021q/vlan.h | 24 +-
net/8021q/vlan_core.c | 6 +-
net/8021q/vlan_dev.c | 57 +--
net/batman-adv/soft-interface.c | 5 +-
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/dccp/ipv4.c | 2 +-
net/dccp/ipv6.c | 7 +-
net/decnet/af_decnet.c | 2 +-
net/decnet/dn_nsp_out.c | 2 +-
net/dsa/slave.c | 24 +-
net/ethtool/features.c | 94 ++--
net/ethtool/ioctl.c | 154 ++++---
net/hsr/hsr_device.c | 40 +-
net/hsr/hsr_forward.c | 11 +-
net/hsr/hsr_framereg.c | 3 +-
net/hsr/hsr_slave.c | 3 +-
net/ieee802154/6lowpan/core.c | 2 +-
net/ieee802154/core.c | 14 +-
net/ipv4/af_inet.c | 5 +-
net/ipv4/esp4_offload.c | 28 +-
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/l2tp/l2tp_eth.c | 3 +-
net/mac80211/iface.c | 10 +-
net/mac80211/main.c | 5 +-
net/mpls/mpls_gso.c | 4 +-
net/netfilter/ipvs/ip_vs_proto_sctp.c | 3 +-
net/nsh/nsh.c | 2 +-
net/openvswitch/datapath.c | 5 +-
net/openvswitch/vport-internal_dev.c | 23 +-
net/phonet/pep-gprs.c | 3 +-
net/sched/sch_cake.c | 6 +-
net/sched/sch_netem.c | 6 +-
net/sched/sch_taprio.c | 6 +-
net/sched/sch_tbf.c | 6 +-
net/sctp/offload.c | 12 +-
net/sctp/output.c | 2 +-
net/sunrpc/sunrpc.h | 2 +-
net/tls/tls_device.c | 10 +-
net/wireless/core.c | 14 +-
net/xfrm/xfrm_device.c | 31 +-
net/xfrm/xfrm_interface.c | 6 +-
net/xfrm/xfrm_output.c | 4 +-
424 files changed, 6578 insertions(+), 4454 deletions(-)
--
2.33.0
5
283

23 Sep '21
Add new implementation for mmap by using the new mmap entry API.
Subsequent new features will use this new implementation. The old
mmap which use a hard-corded offset will not be further expanded.
And forward compatibility is also guaranteed in this patch.
Signed-off-by: Chengchang Tang <tangchengchang(a)huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_device.h | 21 ++++
drivers/infiniband/hw/hns/hns_roce_main.c | 147 +++++++++++++++++++++++++++-
include/uapi/rdma/hns-abi.h | 21 +++-
3 files changed, 184 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 9467c39..ca45694 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -225,11 +225,23 @@ struct hns_roce_uar {
unsigned long logic_idx;
};
+struct hns_user_mmap_entry {
+ struct rdma_user_mmap_entry rdma_entry;
+ u64 address;
+ u8 mmap_flag;
+};
+
+enum hns_roce_mmap_type {
+ HNS_ROCE_MMAP_TYPE_DB = 1,
+};
+
struct hns_roce_ucontext {
struct ib_ucontext ibucontext;
struct hns_roce_uar uar;
struct list_head page_list;
struct mutex page_mutex;
+ bool mmap_key_support;
+ struct rdma_user_mmap_entry *db_mmap_entry;
};
struct hns_roce_pd {
@@ -1049,6 +1061,12 @@ static inline struct hns_roce_srq *to_hr_srq(struct ib_srq *ibsrq)
return container_of(ibsrq, struct hns_roce_srq, ibsrq);
}
+static inline struct hns_user_mmap_entry *to_hns_mmap(
+ struct rdma_user_mmap_entry *rdma_entry)
+{
+ return container_of(rdma_entry, struct hns_user_mmap_entry, rdma_entry);
+}
+
static inline void hns_roce_write64_k(__le32 val[2], void __iomem *dest)
{
writeq(*(u64 *)val, dest);
@@ -1259,4 +1277,7 @@ int hns_roce_init(struct hns_roce_dev *hr_dev);
void hns_roce_exit(struct hns_roce_dev *hr_dev);
int hns_roce_fill_res_cq_entry(struct sk_buff *msg,
struct ib_cq *ib_cq);
+struct rdma_user_mmap_entry *hns_roce_user_mmap_entry_insert(
+ struct ib_ucontext *ucontext, u64 address,
+ size_t length, u8 mmap_flag);
#endif /* _HNS_ROCE_DEVICE_H */
diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
index 5d39bd0..169f0c1 100644
--- a/drivers/infiniband/hw/hns/hns_roce_main.c
+++ b/drivers/infiniband/hw/hns/hns_roce_main.c
@@ -291,6 +291,83 @@ static int hns_roce_modify_device(struct ib_device *ib_dev, int mask,
return 0;
}
+struct rdma_user_mmap_entry *hns_roce_user_mmap_entry_insert(
+ struct ib_ucontext *ucontext, u64 address,
+ size_t length, u8 mmap_flag)
+{
+ struct hns_user_mmap_entry *entry;
+ int ret;
+
+ entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+ if (!entry)
+ return NULL;
+
+ entry->address = address;
+ entry->mmap_flag = mmap_flag;
+
+ ret = rdma_user_mmap_entry_insert(ucontext, &entry->rdma_entry,
+ length);
+ if (ret) {
+ kfree(entry);
+ return NULL;
+ }
+
+ return &entry->rdma_entry;
+}
+
+static void hns_roce_dealloc_uar_entry(struct hns_roce_ucontext *context)
+{
+ if (!context->mmap_key_support)
+ return;
+
+ rdma_user_mmap_entry_remove(context->db_mmap_entry);
+}
+
+static int hns_roce_alloc_uar_entry(struct ib_ucontext *uctx)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ u64 address;
+
+ if (!context->mmap_key_support)
+ return 0;
+
+ address = context->uar.pfn << PAGE_SHIFT;
+ context->db_mmap_entry =
+ hns_roce_user_mmap_entry_insert(uctx, address, PAGE_SIZE,
+ HNS_ROCE_MMAP_TYPE_DB);
+ if (!context->db_mmap_entry)
+ return -ENOMEM;
+
+ return 0;
+}
+
+static void get_ucontext_config(struct hns_roce_ucontext *context,
+ struct hns_roce_ib_alloc_ucontext *ucmd)
+{
+ struct hns_roce_dev *hr_dev = to_hr_dev(context->ibucontext.device);
+
+ if (ucmd->comp & HNS_ROCE_ALLOC_UCTX_COMP_CONFIG && hr_dev->hw_rev !=
+ HNS_ROCE_HW_VER1)
+ context->mmap_key_support = !!(ucmd->config &
+ HNS_ROCE_UCTX_REQ_MMAP_KEY_EN);
+}
+
+static void ucontext_set_resp(struct ib_ucontext *uctx,
+ struct hns_roce_ib_alloc_ucontext_resp *resp)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+
+ resp->qp_tab_size = hr_dev->caps.num_qps;
+ resp->cqe_size = hr_dev->caps.cqe_sz;
+ resp->srq_tab_size = hr_dev->caps.num_srqs;
+ if (context->mmap_key_support) {
+ resp->config |= HNS_ROCE_UCTX_RESP_MMAP_KEY_EN;
+ resp->db_mmap_key =
+ rdma_user_mmap_get_offset(context->db_mmap_entry);
+ }
+}
+
static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
struct ib_udata *udata)
{
@@ -298,24 +375,35 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
struct hns_roce_ib_alloc_ucontext_resp resp = {};
struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+ struct hns_roce_ib_alloc_ucontext ucmd = {};
if (!hr_dev->active)
return -EAGAIN;
- resp.qp_tab_size = hr_dev->caps.num_qps;
- resp.srq_tab_size = hr_dev->caps.num_srqs;
+ if (udata->inlen) {
+ ret = ib_copy_from_udata(&ucmd, udata,
+ min(udata->inlen, sizeof(ucmd)));
+ if (ret)
+ return ret;
+ }
+
+ get_ucontext_config(context, &ucmd);
ret = hns_roce_uar_alloc(hr_dev, &context->uar);
if (ret)
goto error_fail_uar_alloc;
+ ret = hns_roce_alloc_uar_entry(uctx);
+ if (ret)
+ goto error_fail_uar_entry;
+
if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB) {
INIT_LIST_HEAD(&context->page_list);
mutex_init(&context->page_mutex);
}
- resp.cqe_size = hr_dev->caps.cqe_sz;
+ ucontext_set_resp(uctx, &resp);
ret = ib_copy_to_udata(udata, &resp,
min(udata->outlen, sizeof(resp)));
@@ -325,6 +413,9 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
return 0;
error_fail_copy_to_udata:
+ hns_roce_dealloc_uar_entry(context);
+
+error_fail_uar_entry:
ida_free(&hr_dev->uar_ida.ida, (int)context->uar.logic_idx);
error_fail_uar_alloc:
@@ -336,10 +427,12 @@ static void hns_roce_dealloc_ucontext(struct ib_ucontext *ibcontext)
struct hns_roce_ucontext *context = to_hr_ucontext(ibcontext);
struct hns_roce_dev *hr_dev = to_hr_dev(ibcontext->device);
+ hns_roce_dealloc_uar_entry(context);
+
ida_free(&hr_dev->uar_ida.ida, (int)context->uar.logic_idx);
}
-static int hns_roce_mmap(struct ib_ucontext *context,
+static int hns_roce_legacy_mmap(struct ib_ucontext *context,
struct vm_area_struct *vma)
{
struct hns_roce_dev *hr_dev = to_hr_dev(context->device);
@@ -371,6 +464,51 @@ static int hns_roce_mmap(struct ib_ucontext *context,
}
}
+static int hns_roce_mmap(struct ib_ucontext *uctx, struct vm_area_struct *vma)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+ struct ib_device *ibdev = &hr_dev->ib_dev;
+ struct rdma_user_mmap_entry *rdma_entry;
+ struct hns_user_mmap_entry *entry;
+ phys_addr_t pfn;
+ pgprot_t prot;
+ int ret;
+
+ if (!context->mmap_key_support)
+ return hns_roce_legacy_mmap(uctx, vma);
+
+ rdma_entry = rdma_user_mmap_entry_get_pgoff(uctx, vma->vm_pgoff);
+ if (!rdma_entry) {
+ ibdev_err(ibdev, "pgoff[%lu] is invalid entry.\n",
+ vma->vm_pgoff);
+ return -EINVAL;
+ }
+
+ entry = to_hns_mmap(rdma_entry);
+ pfn = entry->address >> PAGE_SHIFT;
+ prot = vma->vm_page_prot;
+ switch (entry->mmap_flag) {
+ case HNS_ROCE_MMAP_TYPE_DB:
+ ret = rdma_user_mmap_io(uctx, vma, pfn,
+ rdma_entry->npages * PAGE_SIZE,
+ pgprot_noncached(prot), rdma_entry);
+ break;
+ default:
+ ret = -EINVAL;
+ }
+
+ rdma_user_mmap_entry_put(rdma_entry);
+ return ret;
+}
+
+static void hns_roce_free_mmap(struct rdma_user_mmap_entry *rdma_entry)
+{
+ struct hns_user_mmap_entry *entry = to_hns_mmap(rdma_entry);
+
+ kfree(entry);
+}
+
static int hns_roce_port_immutable(struct ib_device *ib_dev, u32 port_num,
struct ib_port_immutable *immutable)
{
@@ -444,6 +582,7 @@ static const struct ib_device_ops hns_roce_dev_ops = {
.get_link_layer = hns_roce_get_link_layer,
.get_port_immutable = hns_roce_port_immutable,
.mmap = hns_roce_mmap,
+ .mmap_free = hns_roce_free_mmap,
.modify_device = hns_roce_modify_device,
.modify_qp = hns_roce_modify_qp,
.query_ah = hns_roce_query_ah,
diff --git a/include/uapi/rdma/hns-abi.h b/include/uapi/rdma/hns-abi.h
index 42b1776..ce1e39f 100644
--- a/include/uapi/rdma/hns-abi.h
+++ b/include/uapi/rdma/hns-abi.h
@@ -83,11 +83,30 @@ struct hns_roce_ib_create_qp_resp {
__aligned_u64 cap_flags;
};
+enum hns_roce_alloc_uctx_comp_flag {
+ HNS_ROCE_ALLOC_UCTX_COMP_CONFIG = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_resp_config {
+ HNS_ROCE_UCTX_RESP_MMAP_KEY_EN = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_req_config {
+ HNS_ROCE_UCTX_REQ_MMAP_KEY_EN = 1 << 0,
+};
+
+struct hns_roce_ib_alloc_ucontext {
+ __u32 comp;
+ __u32 config;
+};
+
struct hns_roce_ib_alloc_ucontext_resp {
__u32 qp_tab_size;
__u32 cqe_size;
__u32 srq_tab_size;
- __u32 reserved;
+ __u8 config;
+ __u8 rsv[3];
+ __aligned_u64 db_mmap_key;
};
struct hns_roce_ib_alloc_pd_resp {
--
2.9.5
1
0
Add a new mmap mode support for hns. All the subsequent new
features will be completed in a similar implementation of mmap.
In the new mmap mode, the user space driver use the offset sent
by kernel space driver to complete the mmap instead of a
hard-coded offset.
Forward compatibility is guaranteed in this patch.
Signed-off-by: Chengchang Tang <tangchengchang(a)huawei.com>
---
kernel-headers/rdma/hns-abi.h | 21 +++++++++-
providers/hns/hns_roce_u.c | 87 ++++++++++++++++++++++++++++++------------
providers/hns/hns_roce_u.h | 1 +
providers/hns/hns_roce_u_abi.h | 2 +-
4 files changed, 85 insertions(+), 26 deletions(-)
diff --git a/kernel-headers/rdma/hns-abi.h b/kernel-headers/rdma/hns-abi.h
index 42b1776..ce1e39f 100644
--- a/kernel-headers/rdma/hns-abi.h
+++ b/kernel-headers/rdma/hns-abi.h
@@ -83,11 +83,30 @@ struct hns_roce_ib_create_qp_resp {
__aligned_u64 cap_flags;
};
+enum hns_roce_alloc_uctx_comp_flag {
+ HNS_ROCE_ALLOC_UCTX_COMP_CONFIG = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_resp_config {
+ HNS_ROCE_UCTX_RESP_MMAP_KEY_EN = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_req_config {
+ HNS_ROCE_UCTX_REQ_MMAP_KEY_EN = 1 << 0,
+};
+
+struct hns_roce_ib_alloc_ucontext {
+ __u32 comp;
+ __u32 config;
+};
+
struct hns_roce_ib_alloc_ucontext_resp {
__u32 qp_tab_size;
__u32 cqe_size;
__u32 srq_tab_size;
- __u32 reserved;
+ __u8 config;
+ __u8 rsv[3];
+ __aligned_u64 db_mmap_key;
};
struct hns_roce_ib_alloc_pd_resp {
diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index 3b31ad3..3817ecb 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -95,16 +95,67 @@ static const struct verbs_context_ops hns_common_ops = {
.get_srq_num = hns_roce_u_get_srq_num,
};
+static int hns_roce_mmap(struct hns_roce_device *hr_dev,
+ struct hns_roce_context *context, int cmd_fd,
+ uint64_t db_mmap_key)
+{
+ int page_size = hr_dev->page_size;
+
+ context->uar = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, cmd_fd, db_mmap_key);
+ if (context->uar == MAP_FAILED)
+ return -EINVAL;
+
+ return 0;
+}
+
+static int hns_roce_legacy_mmap(struct hns_roce_device *hr_dev,
+ struct hns_roce_context *context, int cmd_fd)
+{
+ int offset = 0;
+
+ context->uar = mmap(NULL, hr_dev->page_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, cmd_fd, offset);
+ if (context->uar == MAP_FAILED)
+ return -EINVAL;
+
+ offset += hr_dev->page_size;
+
+ if (hr_dev->hw_version == HNS_ROCE_HW_VER1) {
+ /*
+ * when vma->vm_pgoff is 1, the cq_tptr_base includes 64K CQ,
+ * a pointer of CQ need 2B size
+ */
+ context->cq_tptr_base = mmap(NULL, HNS_ROCE_CQ_DB_BUF_SIZE,
+ PROT_READ | PROT_WRITE, MAP_SHARED,
+ cmd_fd, offset);
+ if (context->cq_tptr_base == MAP_FAILED)
+ goto db_free;
+ }
+ return 0;
+
+db_free:
+ munmap(context->uar, hr_dev->page_size);
+ context->uar = NULL;
+ return -EINVAL;
+}
+
+static void ucontext_set_cmd(struct hns_roce_alloc_ucontext *cmd)
+{
+ cmd->comp = HNS_ROCE_ALLOC_UCTX_COMP_CONFIG;
+ cmd->config = HNS_ROCE_UCTX_REQ_MMAP_KEY_EN;
+}
+
static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev,
int cmd_fd,
void *private_data)
{
struct hns_roce_device *hr_dev = to_hr_dev(ibdev);
struct hns_roce_alloc_ucontext_resp resp = {};
+ struct hns_roce_alloc_ucontext cmd = {};
struct ibv_device_attr dev_attrs;
struct hns_roce_context *context;
- struct ibv_get_context cmd;
- int offset = 0;
+ int ret;
int i;
context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx,
@@ -112,10 +163,14 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev,
if (!context)
return NULL;
- if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof(cmd),
+ ucontext_set_cmd(&cmd);
+ if (ibv_cmd_get_context(&context->ibv_ctx, &cmd.ibv_cmd, sizeof(cmd),
&resp.ibv_resp, sizeof(resp)))
goto err_free;
+ context->mmap_key_support = !!(resp.config &
+ HNS_ROCE_UCTX_RESP_MMAP_KEY_EN);
+
if (!resp.cqe_size)
context->cqe_size = HNS_ROCE_CQE_SIZE;
else if (resp.cqe_size <= HNS_ROCE_V3_CQE_SIZE)
@@ -153,26 +208,14 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev,
context->max_cqe = dev_attrs.max_cqe;
context->max_srq_wr = dev_attrs.max_srq_wr;
context->max_srq_sge = dev_attrs.max_srq_sge;
+ if (context->mmap_key_support)
+ ret = hns_roce_mmap(hr_dev, context, cmd_fd, resp.db_mmap_key);
+ else
+ ret = hns_roce_legacy_mmap(hr_dev, context, cmd_fd);
- context->uar = mmap(NULL, hr_dev->page_size, PROT_READ | PROT_WRITE,
- MAP_SHARED, cmd_fd, offset);
- if (context->uar == MAP_FAILED)
+ if (ret)
goto err_free;
- offset += hr_dev->page_size;
-
- if (hr_dev->hw_version == HNS_ROCE_HW_VER1) {
- /*
- * when vma->vm_pgoff is 1, the cq_tptr_base includes 64K CQ,
- * a pointer of CQ need 2B size
- */
- context->cq_tptr_base = mmap(NULL, HNS_ROCE_CQ_DB_BUF_SIZE,
- PROT_READ | PROT_WRITE, MAP_SHARED,
- cmd_fd, offset);
- if (context->cq_tptr_base == MAP_FAILED)
- goto db_free;
- }
-
pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE);
verbs_set_ops(&context->ibv_ctx, &hns_common_ops);
@@ -180,10 +223,6 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev,
return &context->ibv_ctx;
-db_free:
- munmap(context->uar, hr_dev->page_size);
- context->uar = NULL;
-
err_free:
verbs_uninit_context(&context->ibv_ctx);
free(context);
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index 0d7abd8..126c9d3 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -180,6 +180,7 @@ struct hns_roce_context {
unsigned int max_srq_sge;
int max_cqe;
unsigned int cqe_size;
+ bool mmap_key_support;
};
struct hns_roce_pd {
diff --git a/providers/hns/hns_roce_u_abi.h b/providers/hns/hns_roce_u_abi.h
index e56f9d3..295808b 100644
--- a/providers/hns/hns_roce_u_abi.h
+++ b/providers/hns/hns_roce_u_abi.h
@@ -42,7 +42,7 @@ DECLARE_DRV_CMD(hns_roce_alloc_pd, IB_USER_VERBS_CMD_ALLOC_PD,
DECLARE_DRV_CMD(hns_roce_create_cq, IB_USER_VERBS_CMD_CREATE_CQ,
hns_roce_ib_create_cq, hns_roce_ib_create_cq_resp);
DECLARE_DRV_CMD(hns_roce_alloc_ucontext, IB_USER_VERBS_CMD_GET_CONTEXT,
- empty, hns_roce_ib_alloc_ucontext_resp);
+ hns_roce_ib_alloc_ucontext, hns_roce_ib_alloc_ucontext_resp);
DECLARE_DRV_CMD(hns_roce_create_qp, IB_USER_VERBS_CMD_CREATE_QP,
hns_roce_ib_create_qp, hns_roce_ib_create_qp_resp);
--
2.9.5
1
0
Patch 1: support non-split page when PP_FLAG_PAGE_FRAG is set.
patch 2: avoid calling compound_head() for skb frag page
Patch 3: keep track of pp page when __skb_frag_ref() is called.
V2: add patch 2, adjust the commit log accroding to the discussion
in V1, and fix a compiler error reported by kernel test robot.
Yunsheng Lin (3):
page_pool: support non-split page with PP_FLAG_PAGE_FRAG
pool_pool: avoid calling compound_head() for skb frag page
skbuff: keep track of pp page when __skb_frag_ref() is called
include/linux/skbuff.h | 40 ++++++++++++++++++++++++++++++++++++----
include/net/page_pool.h | 34 +++++++++++++++++++++++++++++++++-
net/core/page_pool.c | 30 +++++++++---------------------
3 files changed, 78 insertions(+), 26 deletions(-)
--
2.33.0
5
23

22 Sep '21
Add new implementation for mmap by using the new mmap entry API.
Subsequent new features will use this new implementation. The old
mmap which use a hard-corded offset will not be further expanded.
And forward compatibility is also guaranteed in this patch.
Signed-off-by: Chengchang Tang <tangchengchang(a)huawei.com>
---
drivers/infiniband/hw/hns/hns_roce_device.h | 21 ++++
drivers/infiniband/hw/hns/hns_roce_main.c | 144 +++++++++++++++++++++++++++-
include/uapi/rdma/hns-abi.h | 21 +++-
3 files changed, 181 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h b/drivers/infiniband/hw/hns/hns_roce_device.h
index 9467c39..ca45694 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -225,11 +225,23 @@ struct hns_roce_uar {
unsigned long logic_idx;
};
+struct hns_user_mmap_entry {
+ struct rdma_user_mmap_entry rdma_entry;
+ u64 address;
+ u8 mmap_flag;
+};
+
+enum hns_roce_mmap_type {
+ HNS_ROCE_MMAP_TYPE_DB = 1,
+};
+
struct hns_roce_ucontext {
struct ib_ucontext ibucontext;
struct hns_roce_uar uar;
struct list_head page_list;
struct mutex page_mutex;
+ bool mmap_key_support;
+ struct rdma_user_mmap_entry *db_mmap_entry;
};
struct hns_roce_pd {
@@ -1049,6 +1061,12 @@ static inline struct hns_roce_srq *to_hr_srq(struct ib_srq *ibsrq)
return container_of(ibsrq, struct hns_roce_srq, ibsrq);
}
+static inline struct hns_user_mmap_entry *to_hns_mmap(
+ struct rdma_user_mmap_entry *rdma_entry)
+{
+ return container_of(rdma_entry, struct hns_user_mmap_entry, rdma_entry);
+}
+
static inline void hns_roce_write64_k(__le32 val[2], void __iomem *dest)
{
writeq(*(u64 *)val, dest);
@@ -1259,4 +1277,7 @@ int hns_roce_init(struct hns_roce_dev *hr_dev);
void hns_roce_exit(struct hns_roce_dev *hr_dev);
int hns_roce_fill_res_cq_entry(struct sk_buff *msg,
struct ib_cq *ib_cq);
+struct rdma_user_mmap_entry *hns_roce_user_mmap_entry_insert(
+ struct ib_ucontext *ucontext, u64 address,
+ size_t length, u8 mmap_flag);
#endif /* _HNS_ROCE_DEVICE_H */
diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
index 5d39bd0..b8be8b7 100644
--- a/drivers/infiniband/hw/hns/hns_roce_main.c
+++ b/drivers/infiniband/hw/hns/hns_roce_main.c
@@ -291,6 +291,80 @@ static int hns_roce_modify_device(struct ib_device *ib_dev, int mask,
return 0;
}
+struct rdma_user_mmap_entry *hns_roce_user_mmap_entry_insert(
+ struct ib_ucontext *ucontext, u64 address,
+ size_t length, u8 mmap_flag)
+{
+ struct hns_user_mmap_entry *entry;
+ int ret;
+
+ entry = kzalloc(sizeof(*entry), GFP_KERNEL);
+ if (!entry)
+ return NULL;
+
+ entry->address = address;
+ entry->mmap_flag = mmap_flag;
+
+ ret = rdma_user_mmap_entry_insert(ucontext, &entry->rdma_entry,
+ length);
+ if (ret) {
+ kfree(entry);
+ return NULL;
+ }
+
+ return &entry->rdma_entry;
+}
+
+static void hns_roce_dealloc_uar_entry(struct hns_roce_ucontext *context)
+{
+ rdma_user_mmap_entry_remove(context->db_mmap_entry);
+}
+
+static int hns_roce_alloc_uar_entry(struct ib_ucontext *uctx)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ u64 address;
+
+ if (!context->mmap_key_support)
+ return 0;
+
+ address = context->uar.pfn << PAGE_SHIFT;
+ context->db_mmap_entry =
+ hns_roce_user_mmap_entry_insert(uctx, address, PAGE_SIZE,
+ HNS_ROCE_MMAP_TYPE_DB);
+ if (!context->db_mmap_entry)
+ return -ENOMEM;
+
+ return 0;
+}
+
+static void get_ucontext_config(struct hns_roce_ucontext *context,
+ struct hns_roce_ib_alloc_ucontext *ucmd)
+{
+ struct hns_roce_dev *hr_dev = to_hr_dev(context->ibucontext.device);
+
+ if (ucmd->comp & HNS_ROCE_ALLOC_UCTX_COMP_CONFIG && hr_dev->hw_rev !=
+ HNS_ROCE_HW_VER1)
+ context->mmap_key_support = !!(ucmd->config &
+ HNS_ROCE_UCTX_REQ_EN_MMAP_KEY);
+}
+
+static void ucontext_set_resp(struct ib_ucontext *uctx,
+ struct hns_roce_ib_alloc_ucontext_resp *resp)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+
+ resp->qp_tab_size = hr_dev->caps.num_qps;
+ resp->cqe_size = hr_dev->caps.cqe_sz;
+ resp->srq_tab_size = hr_dev->caps.num_srqs;
+ if (context->mmap_key_support) {
+ resp->config |= HNS_ROCE_UCTX_RESP_MMAP_KEY_EN;
+ resp->db_mmap_key =
+ rdma_user_mmap_get_offset(context->db_mmap_entry);
+ }
+}
+
static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
struct ib_udata *udata)
{
@@ -298,24 +372,35 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
struct hns_roce_ib_alloc_ucontext_resp resp = {};
struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+ struct hns_roce_ib_alloc_ucontext ucmd = {};
if (!hr_dev->active)
return -EAGAIN;
- resp.qp_tab_size = hr_dev->caps.num_qps;
- resp.srq_tab_size = hr_dev->caps.num_srqs;
+ if (udata->inlen) {
+ ret = ib_copy_from_udata(&ucmd, udata,
+ min(udata->inlen, sizeof(ucmd)));
+ if (ret)
+ return ret;
+ }
+
+ get_ucontext_config(context, &ucmd);
ret = hns_roce_uar_alloc(hr_dev, &context->uar);
if (ret)
goto error_fail_uar_alloc;
+ ret = hns_roce_alloc_uar_entry(uctx);
+ if (ret)
+ goto error_fail_uar_entry;
+
if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB) {
INIT_LIST_HEAD(&context->page_list);
mutex_init(&context->page_mutex);
}
- resp.cqe_size = hr_dev->caps.cqe_sz;
+ ucontext_set_resp(uctx, &resp);
ret = ib_copy_to_udata(udata, &resp,
min(udata->outlen, sizeof(resp)));
@@ -325,6 +410,9 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
return 0;
error_fail_copy_to_udata:
+ hns_roce_dealloc_uar_entry(context);
+
+error_fail_uar_entry:
ida_free(&hr_dev->uar_ida.ida, (int)context->uar.logic_idx);
error_fail_uar_alloc:
@@ -336,10 +424,12 @@ static void hns_roce_dealloc_ucontext(struct ib_ucontext *ibcontext)
struct hns_roce_ucontext *context = to_hr_ucontext(ibcontext);
struct hns_roce_dev *hr_dev = to_hr_dev(ibcontext->device);
+ hns_roce_dealloc_uar_entry(context);
+
ida_free(&hr_dev->uar_ida.ida, (int)context->uar.logic_idx);
}
-static int hns_roce_mmap(struct ib_ucontext *context,
+static int hns_roce_legacy_mmap(struct ib_ucontext *context,
struct vm_area_struct *vma)
{
struct hns_roce_dev *hr_dev = to_hr_dev(context->device);
@@ -371,6 +461,51 @@ static int hns_roce_mmap(struct ib_ucontext *context,
}
}
+static int hns_roce_mmap(struct ib_ucontext *uctx, struct vm_area_struct *vma)
+{
+ struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
+ struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
+ struct ib_device *ibdev = &hr_dev->ib_dev;
+ struct rdma_user_mmap_entry *rdma_entry;
+ struct hns_user_mmap_entry *entry;
+ phys_addr_t pfn;
+ pgprot_t prot;
+ int ret;
+
+ if (!context->mmap_key_support)
+ return hns_roce_legacy_mmap(uctx, vma);
+
+ rdma_entry = rdma_user_mmap_entry_get_pgoff(uctx, vma->vm_pgoff);
+ if (!rdma_entry) {
+ ibdev_err(ibdev, "pgoff[%lu] is invalid entry.\n",
+ vma->vm_pgoff);
+ return -EINVAL;
+ }
+
+ entry = to_hns_mmap(rdma_entry);
+ pfn = entry->address >> PAGE_SHIFT;
+ prot = vma->vm_page_prot;
+ switch (entry->mmap_flag) {
+ case HNS_ROCE_MMAP_TYPE_DB:
+ ret = rdma_user_mmap_io(uctx, vma, pfn,
+ rdma_entry->npages * PAGE_SIZE,
+ pgprot_noncached(prot), rdma_entry);
+ break;
+ default:
+ ret = -EINVAL;
+ }
+
+ rdma_user_mmap_entry_put(rdma_entry);
+ return ret;
+}
+
+static void hns_roce_free_mmap(struct rdma_user_mmap_entry *rdma_entry)
+{
+ struct hns_user_mmap_entry *entry = to_hns_mmap(rdma_entry);
+
+ kfree(entry);
+}
+
static int hns_roce_port_immutable(struct ib_device *ib_dev, u32 port_num,
struct ib_port_immutable *immutable)
{
@@ -444,6 +579,7 @@ static const struct ib_device_ops hns_roce_dev_ops = {
.get_link_layer = hns_roce_get_link_layer,
.get_port_immutable = hns_roce_port_immutable,
.mmap = hns_roce_mmap,
+ .mmap_free = hns_roce_free_mmap,
.modify_device = hns_roce_modify_device,
.modify_qp = hns_roce_modify_qp,
.query_ah = hns_roce_query_ah,
diff --git a/include/uapi/rdma/hns-abi.h b/include/uapi/rdma/hns-abi.h
index 42b1776..bb9a02d 100644
--- a/include/uapi/rdma/hns-abi.h
+++ b/include/uapi/rdma/hns-abi.h
@@ -83,11 +83,30 @@ struct hns_roce_ib_create_qp_resp {
__aligned_u64 cap_flags;
};
+enum hns_roce_alloc_uctx_comp_flag {
+ HNS_ROCE_ALLOC_UCTX_COMP_CONFIG = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_resp_config {
+ HNS_ROCE_UCTX_RESP_MMAP_KEY_EN = 1 << 0,
+};
+
+enum hns_roce_alloc_uctx_req_config {
+ HNS_ROCE_UCTX_REQ_EN_MMAP_KEY = 1 << 0,
+};
+
+struct hns_roce_ib_alloc_ucontext {
+ __u32 comp;
+ __u32 config;
+};
+
struct hns_roce_ib_alloc_ucontext_resp {
__u32 qp_tab_size;
__u32 cqe_size;
__u32 srq_tab_size;
- __u32 reserved;
+ __u8 config;
+ __u8 rsv[3];
+ __aligned_u64 db_mmap_key;
};
struct hns_roce_ib_alloc_pd_resp {
--
2.9.5
2
2