Skip to content
Permalink
Florian-Westph…
Switch branches/tags

Commits on Oct 14, 2021

  1. netfilter: hook_jit: add prog cache

    This allows to re-use the same program.  For example, a nft
    ruleset that attaches filter basechains to input, forward, output would
    use the same program for all three hook points.
    
    The cache is intentionally netns agnostic, so same config
    in different netns will all use same programs.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  2. netfilter: ingress: switch to invocation via bpf

    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  3. netfilter: core: do not rebuild bpf program on dying netns

    We can save a few cycles on netns destruction.
    When a hook is removed we can just skip building a new
    program with the remaining hooks, those will be removed too
    in the immediate future.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  4. netfilter: add bpf base hook program generator

    Add a kernel bpf program generator for netfilter base hooks.
    
    Currently netfilter hooks are invoked by nf_hook_slow:
    
    for i in hooks; do
      verdict = hooks[i]->indirect_func(hooks->[i].hook_arg, skb, state);
    
      switch (verdict) { ....
    
    The autogenerator unrolls the loop, so we get:
    
    state->priv = hooks->[0].hook_arg;
    v = first_hook_function(state);
    if (v != ACCEPT) goto done;
    state->priv = hooks->[1].hook_arg;
    v = second_hook_function(state); ...
    
    Indirections are replaced by direct calls. Invocation of the
    autogenerated programs is done via bpf dispatcher from nf_hook().
    
    The autogenerated program has the same return value scheme as
    nf_hook_slow(). NF_HOOK() points are converted to call the
    autogenerated bpf program instead of nf_hook_slow().
    
    Purpose of this is to eventually add a 'netfilter prog type' to bpf and
    permit attachment of (userspace generated) bpf programs to the netfilter
    machinery, e.g.  'attach bpf prog id 1234 to ipv6 PREROUTING at prio -300'.
    
    This will require to expose the context structure (program argument,
    '__nf_hook_state', with rewriting accesses to match nf_hook_state layout.
    
    TODO:
    1. Test !x86_64.
    2. Test bridge family.
    
    Future work:
    add support for NAT hooks, they still use indirect calls, but those
    are less of a problem because these get called only once per
    connection.
    
    Could annotate ops struct as to what kind of verdicts the
    C function can return.  This would allow to elide retval
    check when hook can only return NF_ACCEPT.
    
    Could add extra support for INGRESS hook to move more code from
    inline functions to the autogenerated program.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  5. netfilter: reduce allowed hook count to 32

    1k is huge and will mean we'd need to support tailcalls in the
    nf_hook bpf converter.
    
    We need about 5 insns per hook at this time, ignoring prologue/epilogue.
    
    32 should be fine, typically even extreme cases need about 8 hooks per
    hook location.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  6. netfilter: make hook functions accept only one argument

    BPF conversion requirement: one pointer-to-structure as argument.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  7. netfilter: remove hook index from nf_hook_slow arguments

    Previous patch added hook_entry member to nf_hook_state struct, so
    use that for passing the index.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  8. netfilter: nat: split nat hook iteration into a helper

    Makes conversion in followup patch simpler.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021
  9. netfilter: nf_queue: carry index in hook state

    Rather than passing the index (hook function to call next)
    as function argument, store it in the hook state.
    
    This is a prerequesite to allow passing all nf hook arguments in a single
    structure.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Florian Westphal authored and intel-lab-lkp committed Oct 14, 2021

Commits on Oct 7, 2021

  1. netfilter: nft_dynset: relax superfluous check on set updates

    Relax this condition to make add and update commands idempotent for sets
    with no timeout. The eval function already checks if the set element
    timeout is available and updates it if the update command is used.
    
    Fixes: 22fe54d ("netfilter: nf_tables: add support for dynamic set updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    ummakynes committed Oct 7, 2021
  2. ipvs: add sysctl_run_estimation to support disable estimation

    estimation_timer will iterate the est_list to do estimation
    for each ipvs stats. When there are lots of services, the
    list can be very large.
    We found that estimation_timer() run for more then 200ms on a
    machine with 104 CPU and 50K services.
    
    yunhong-cgl jiang report the same phenomenon before:
    https://www.spinics.net/lists/lvs-devel/msg05426.html
    
    In some cases(for example a large K8S cluster with many ipvs services),
    ipvs estimation may not be needed. So adding a sysctl blob to allow
    users to disable this completely.
    
    Default is: 1 (enable)
    
    Cc: yunhong-cgl jiang <xintian1976@gmail.com>
    Signed-off-by: Dust Li <dust.li@linux.alibaba.com>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Acked-by: Simon Horman <horms@verge.net.au>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Dust Li authored and ummakynes committed Oct 7, 2021
  3. ethernet: ti: cpts: Use devm_kcalloc() instead of devm_kzalloc()

    Use 2-factor multiplication argument form devm_kcalloc() instead
    of devm_kzalloc().
    
    Link: KSPP#162
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20211006181115.GA913499@embeddedor
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    GustavoARSilva authored and Jakub Kicinski committed Oct 7, 2021
  4. net: stmmac: selftests: Use kcalloc() instead of kzalloc()

    Use 2-factor multiplication argument form kcalloc() instead
    of kzalloc().
    
    Link: KSPP#162
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20211006180944.GA913477@embeddedor
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    GustavoARSilva authored and Jakub Kicinski committed Oct 7, 2021
  5. net: mana: Use kcalloc() instead of kzalloc()

    Use 2-factor multiplication argument form kcalloc() instead
    of kzalloc().
    
    Link: KSPP#162
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Reviewed-by: Dexuan Cui <decui@microsoft.com>
    Link: https://lore.kernel.org/r/20211006180927.GA913456@embeddedor
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    GustavoARSilva authored and Jakub Kicinski committed Oct 7, 2021
  6. net: broadcom: bcm4908_enet: use kcalloc() instead of kzalloc()

    Use 2-factor multiplication argument form kcalloc() instead
    of kzalloc().
    
    Link: KSPP#162
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20211006180843.GA913399@embeddedor
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    GustavoARSilva authored and Jakub Kicinski committed Oct 7, 2021
  7. Merge tag 'wireless-drivers-next-2021-10-07' of git://git.kernel.org/…

    …pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
    
    Kalle Valo says:
    
    ====================
    wireless-drivers-next patches for v5.16
    
    First set of patches for v5.16. ath11k getting most of new features
    this time. Other drivers also have few new features, and of course the
    usual set of fixes and cleanups all over.
    
    Major changes:
    
    rtw88
    
    * support adaptivity for ETSI/JP DFS region
    
    * 8821c: support RFE type4 wifi NIC
    
    brcmfmac
    
    * DMI nvram filename quirk for Cyberbook T116 tablet
    
    ath9k
    
    * load calibration data and pci init values via nvmem subsystem
    
    ath11k
    
    * include channel rx and tx time in survey dump statistics
    
    * support for setting fixed Wi-Fi 6 rates from user space
    
    * support for 80P80 and 160 MHz bandwidths
    
    * spectral scan support for QCN9074
    
    * support for calibration data files per radio
    
    * support for calibration data via eeprom
    
    * support for rx decapsulation offload (data frames in 802.3 format)
    
    * support channel 2 in 6 GHz band
    
    ath10k
    
    * include frame time stamp in beacon and probe response frames
    
    wcn36xx
    
    * enable Idle Mode Power Save (IMPS) to reduce power consumption during idle
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Oct 7, 2021
  8. Merge branch 'dev_addr-fw-helpers'

    Jakub Kicinski says:
    
    ====================
    net: add a helpers for loading netdev->dev_addr from FW
    
    We're trying to make all writes to netdev->dev_addr go via helpers.
    A lot of places pass netdev->dev_addr to of_get_ethdev_address() and
    device_get_ethdev_addr() so this set adds new functions which wrap
    the functionality.
    
    v2 performs suggested code moves, adds a couple additional clean ups
    on the device property side, and an extra patch converting drivers
    which can benefit from device_get_ethdev_address().
    
    v3 removes OF_NET and corrects kdoc.
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Oct 7, 2021
  9. ethernet: make more use of device_get_ethdev_address()

    Convert a few drivers to device_get_ethdev_address(),
    saving a few LoC.
    
    The check if addr is valid in netsec is superfluous,
    device_get_ethdev_addr() already checks that (in
    fwnode_get_mac_addr()).
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  10. ethernet: use device_get_ethdev_address()

    Use the new device_get_ethdev_address() helper for the cases
    where dev->dev_addr is passed in directly as the destination.
    
      @@
      expression dev, np;
      @@
      - device_get_mac_address(np, dev->dev_addr, ETH_ALEN)
      + device_get_ethdev_address(np, dev)
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  11. eth: fwnode: add a helper for loading netdev->dev_addr

    Commit 406f42f ("net-next: When a bond have a massive amount
    of VLANs...") introduced a rbtree for faster Ethernet address look
    up. To maintain netdev->dev_addr in this tree we need to make all
    the writes to it got through appropriate helpers.
    
    There is a handful of drivers which pass netdev->dev_addr as
    the destination buffer to device_get_mac_address(). Add a helper
    which takes a dev pointer instead, so it can call an appropriate
    helper.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  12. eth: fwnode: remove the addr len from mac helpers

    All callers pass in ETH_ALEN and the function itself
    will return -EINVAL for any other address length.
    Just assume it's ETH_ALEN like all other mac address
    helpers (nvm, of, platform).
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  13. eth: fwnode: change the return type of mac address helpers

    fwnode_get_mac_address() and device_get_mac_address()
    return a pointer to the buffer that was passed to them
    on success or NULL on failure. None of the callers
    care about the actual value, only if it's NULL or not.
    
    These semantics differ from of_get_mac_address() which
    returns an int so to avoid confusion make the device
    helpers return an errno.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  14. device property: move mac addr helpers to eth.c

    Move the mac address helpers out, eth.c already contains
    a bunch of similar helpers.
    
    Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  15. ethernet: use of_get_ethdev_address()

    Use the new of_get_ethdev_address() helper for the cases
    where dev->dev_addr is passed in directly as the destination.
    
      @@
      expression dev, np;
      @@
      - of_get_mac_address(np, dev->dev_addr)
      + of_get_ethdev_address(np, dev)
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  16. of: net: add a helper for loading netdev->dev_addr

    Commit 406f42f ("net-next: When a bond have a massive amount
    of VLANs...") introduced a rbtree for faster Ethernet address look
    up. To maintain netdev->dev_addr in this tree we need to make all
    the writes to it got through appropriate helpers.
    
    There are roughly 40 places where netdev->dev_addr is passed
    as the destination to a of_get_mac_address() call. Add a helper
    which takes a dev pointer instead, so it can call an appropriate
    helper.
    
    Note that of_get_mac_address() already assumes the address is
    6 bytes long (ETH_ALEN) so use eth_hw_addr_set().
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  17. of: net: move of_net under net/

    Rob suggests to move of_net.c from under drivers/of/ somewhere
    to the networking code.
    
    Suggested-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Jakub Kicinski authored and davem330 committed Oct 7, 2021
  18. Merge branch 'nfc-pn533-const'

    Rikard Falkeborn says:
    
    ====================
    nfc: pn533: Constify ops-structs
    
    Constify a couple of ops-structs. This allows the compiler to put the
    static structs in read-only memory.
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Oct 7, 2021
  19. nfc: pn533: Constify pn533_phy_ops

    Neither the driver or the core modifies the pn533_phy_ops struct, so
    make them const to allow the compiler to put the static structs in
    read-only memory.
    
    Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    rikardfalkeborn authored and davem330 committed Oct 7, 2021
  20. nfc: pn533: Constify serdev_device_ops

    The only usage of pn532_serdev_ops is to pass its address to
    serdev_device_set_client_ops(), which takes a pointer to const
    serdev_device_ops as argument. Make it const to allow the compiler to
    put it in read-only memory.
    
    Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    rikardfalkeborn authored and davem330 committed Oct 7, 2021
  21. Merge branch 'add-mdiobus_modify_changed-helper'

    Russell King says:
    
    ====================
    Add mdiobus_modify_changed() helper
    
    Sean Anderson's recent patch series is introducing more read-write
    operations on the MDIO bus that only need to happen if a change is
    being made.
    
    We have similar logic in __mdiobus_modify_changed(), but we didn't
    add its correponding locked variant mdiobus_modify_changed() as we
    had very few users. Now that we are getting more, let's add the
    helper.
    ====================
    
    Link: https://lore.kernel.org/r/YV2UIa2eU+UjmWaE@shell.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Jakub Kicinski committed Oct 7, 2021
  22. net: phylink: use mdiobus_modify_changed() helper

    Use the mdiobus_modify_changed() helper in the C22 PCS advertisement
    helper.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Russell King (Oracle) authored and Jakub Kicinski committed Oct 7, 2021
  23. net: mdio: add mdiobus_modify_changed()

    Add mdiobus_modify_changed() helper to reflect the phylib and similar
    equivalents. This will avoid this functionality being open-coded, as
    has already happened in phylink, and it looks like other users will be
    appearing soon.
    
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Russell King (Oracle) authored and Jakub Kicinski committed Oct 7, 2021
  24. Merge branch 'ethtool-add-ability-to-control-transceiver-modules-powe…

    …r-mode'
    
    Ido Schimmel says:
    
    ====================
    ethtool: Add ability to control transceiver modules' power mode
    
    This patchset extends the ethtool netlink API to allow user space to
    control transceiver modules. Two specific APIs are added, but the plan
    is to extend the interface with more APIs in the future (see "Future
    plans").
    
    This submission is a complete rework of a previous submission [1] that
    tried to achieve the same goal by allowing user space to write to the
    EEPROMs of these modules. It was rejected as it could have enabled user
    space binary blob drivers.
    
    However, the main issue is that by directly writing to some pages of
    these EEPROMs, we are interfering with the entity that is controlling
    the modules (kernel / device firmware). In addition, some functionality
    cannot be implemented solely by writing to the EEPROM, as it requires
    the assertion / de-assertion of hardware signals (e.g., "ResetL" pin in
    SFF-8636).
    
    Motivation
    ==========
    
    The kernel can currently dump the contents of module EEPROMs to user
    space via the ethtool legacy ioctl API or the new netlink API. These
    dumps can then be parsed by ethtool(8) according to the specification
    that defines the memory map of the EEPROM. For example, SFF-8636 [2] for
    QSFP and CMIS [3] for QSFP-DD.
    
    In addition to read-only elements, these specifications also define
    writeable elements that can be used to control the behavior of the
    module. For example, controlling whether the module is put in low or
    high power mode to limit its power consumption.
    
    The CMIS specification even defines a message exchange mechanism (CDB,
    Command Data Block) on top of the module's memory map. This allows the
    host to send various commands to the module. For example, to update its
    firmware.
    
    Implementation
    ==============
    
    The ethtool netlink API is extended with two new messages,
    'ETHTOOL_MSG_MODULE_SET' and 'ETHTOOL_MSG_MODULE_GET', that allow user
    space to set and get transceiver module parameters. Specifically, the
    'ETHTOOL_A_MODULE_POWER_MODE_POLICY' attribute allows user space to
    control the power mode policy of the module in order to limit its power
    consumption. See detailed description in patch #1.
    
    The user API is designed to be generic enough so that it could be used
    for modules with different memory maps (e.g., SFF-8636, CMIS).
    
    The only implementation of the device driver API in this series is for a
    MAC driver (mlxsw) where the module is controlled by the device's
    firmware, but it is designed to be generic enough so that it could also
    be used by implementations where the module is controlled by the kernel.
    
    Testing and introspection
    =========================
    
    See detailed description in patches #1 and #5.
    
    Patchset overview
    =================
    
    Patch #1 adds the initial infrastructure in ethtool along with the
    ability to control transceiver modules' power mode.
    
    Patches #2-#3 add required device registers in mlxsw.
    
    Patch #4 implements in mlxsw the ethtool operations added in patch #1.
    
    Patch #5 adds extended link states in order to allow user space to
    troubleshoot link down issues related to transceiver modules.
    
    Patch torvalds#6 adds support for these extended states in mlxsw.
    
    Future plans
    ============
    
    * Extend 'ETHTOOL_MSG_MODULE_SET' to control Tx output among other
    attributes.
    
    * Add new ethtool message(s) to update firmware on transceiver modules.
    
    * Extend ethtool(8) to parse more diagnostic information from CMIS
    modules. No kernel changes required.
    
    [1] https://lore.kernel.org/netdev/20210623075925.2610908-1-idosch@idosch.org/
    [2] https://members.snia.org/document/dl/26418
    [3] http://www.qsfp-dd.com/wp-content/uploads/2021/05/CMIS5p0.pdf
    
    Previous versions:
    [4] https://lore.kernel.org/netdev/20211003073219.1631064-1-idosch@idosch.org/
    [5] https://lore.kernel.org/netdev/20210824130344.1828076-1-idosch@idosch.org/
    [6] https://lore.kernel.org/netdev/20210818155202.1278177-1-idosch@idosch.org/
    [7] https://lore.kernel.org/netdev/20210809102152.719961-1-idosch@idosch.org/
    ====================
    
    Link: https://lore.kernel.org/r/20211006104647.2357115-1-idosch@idosch.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Jakub Kicinski committed Oct 7, 2021
  25. mlxsw: Add support for transceiver module extended state

    Add support for the transceiver module extended state and sub-state
    added in previous patch. The extended state is meant to describe link
    issues related to transceiver modules.
    
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    idosch authored and Jakub Kicinski committed Oct 7, 2021
  26. ethtool: Add transceiver module extended state

    Add an extended state and sub-state to describe link issues related to
    transceiver modules.
    
    The 'ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY' extended sub-state
    tells user space that port is unable to gain a carrier because the CMIS
    Module State Machine did not reach the ModuleReady (Fully Operational)
    state. For example, if the module is stuck at ModuleLowPwr or
    ModuleFault state. In case of the latter, user space can read the fault
    reason from the module's EEPROM and potentially reset it.
    
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    idosch authored and Jakub Kicinski committed Oct 7, 2021
Older