Skip to content
Permalink
Jussi-Maki/net…
Switch branches/tags

Commits on Jul 7, 2021

  1. net: core: Allow netdev_lower_get_next_private_rcu in bh context

    For the XDP bonding slave lookup to work in the NAPI poll context
    in which the redudant rcu_read_lock() has been removed we have to
    follow the same approach as in [1] and modify the WARN_ON to also
    check rcu_read_lock_bh_held().
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=694cea395fded425008e93cd90cfdf7a451674af
    
    Signed-off-by: Jussi Maki <joamaki@gmail.com>
    joamaki authored and intel-lab-lkp committed Jul 7, 2021
  2. devmap: Exclude XDP broadcast to master device

    If the ingress device is bond slave, do not broadcast back
    through it or the bond master.
    
    Signed-off-by: Jussi Maki <joamaki@gmail.com>
    joamaki authored and intel-lab-lkp committed Jul 7, 2021
  3. net: bonding: Add XDP support to the bonding driver

    XDP is implemented in the bonding driver by transparently delegating
    the XDP program loading, removal and xmit operations to the bonding
    slave devices. The overall goal of this work is that XDP programs
    can be attached to a bond device *without* any further changes (or
    awareness) necessary to the program itself, meaning the same XDP
    program can be attached to a native device but also a bonding device.
    
    Semantics of XDP_TX when attached to a bond are equivalent in such
    setting to the case when a tc/BPF program would be attached to the
    bond, meaning transmitting the packet out of the bond itself using one
    of the bond's configured xmit methods to select a slave device (rather
    than XDP_TX on the slave itself). Handling of XDP_TX to transmit
    using the configured bonding mechanism is therefore implemented by
    rewriting the BPF program return value in bpf_prog_run_xdp. To avoid
    performance impact this check is guarded by a static key, which is
    incremented when a XDP program is loaded onto a bond device. This
    approach was chosen to avoid changes to drivers implementing XDP. If
    the slave device does not match the receive device, then XDP_REDIRECT
    is transparently used to perform the redirection in order to have
    the network driver release the packet from its RX ring.  The bonding
    driver hashing functions have been refactored to allow reuse with
    xdp_buff's to avoid code duplication.
    
    The motivation for this change is to enable use of bonding (and
    802.3ad) in hairpinning L4 load-balancers such as [1] implemented with
    XDP and also to transparently support bond devices for projects that
    use XDP given most modern NICs have dual port adapters.  An alternative
    to this approach would be to implement 802.3ad in user-space and
    implement the bonding load-balancing in the XDP program itself, but
    is rather a cumbersome endeavor in terms of slave device management
    (e.g. by watching netlink) and requires separate programs for native
    vs bond cases for the orchestrator. A native in-kernel implementation
    overcomes these issues and provides more flexibility.
    
    Below are benchmark results done on two machines with 100Gbit
    Intel E810 (ice) NIC and with 32-core 3970X on sending machine, and
    16-core 3950X on receiving machine. 64 byte packets were sent with
    pktgen-dpdk at full rate. Two issues [2, 3] were identified with the
    ice driver, so the tests were performed with iommu=off and patch [2]
    applied. Additionally the bonding round robin algorithm was modified
    to use per-cpu tx counters as high CPU load (50% vs 10%) and high rate
    of cache misses were caused by the shared rr_tx_counter (see patch
    2/3). The statistics were collected using "sar -n dev -u 1 10".
    
     -----------------------|  CPU  |--| rxpck/s |--| txpck/s |----
     without patch (1 dev):
       XDP_DROP:              3.15%      48.6Mpps
       XDP_TX:                3.12%      18.3Mpps     18.3Mpps
       XDP_DROP (RSS):        9.47%      116.5Mpps
       XDP_TX (RSS):          9.67%      25.3Mpps     24.2Mpps
     -----------------------
     with patch, bond (1 dev):
       XDP_DROP:              3.14%      46.7Mpps
       XDP_TX:                3.15%      13.9Mpps     13.9Mpps
       XDP_DROP (RSS):        10.33%     117.2Mpps
       XDP_TX (RSS):          10.64%     25.1Mpps     24.0Mpps
     -----------------------
     with patch, bond (2 devs):
       XDP_DROP:              6.27%      92.7Mpps
       XDP_TX:                6.26%      17.6Mpps     17.5Mpps
       XDP_DROP (RSS):       11.38%      117.2Mpps
       XDP_TX (RSS):         14.30%      28.7Mpps     27.4Mpps
     --------------------------------------------------------------
    
    RSS: Receive Side Scaling, e.g. the packets were sent to a range of
    destination IPs.
    
    [1]: https://cilium.io/blog/2021/05/20/cilium-110#standalonelb
    [2]: https://lore.kernel.org/bpf/20210601113236.42651-1-maciej.fijalkowski@intel.com/T/#t
    [3]: https://lore.kernel.org/bpf/CAHn8xckNXci+X_Eb2WMv4uVYjO2331UWB2JLtXr_58z0Av8+8A@mail.gmail.com/
    
    Signed-off-by: Jussi Maki <joamaki@gmail.com>
    joamaki authored and intel-lab-lkp committed Jul 7, 2021
  4. net: core: Add support for XDP redirection to slave device

    This adds the ndo_xdp_get_xmit_slave hook for transforming XDP_TX
    into XDP_REDIRECT after BPF program run when the ingress device
    is a bond slave.
    
    The dev_xdp_prog_count is exposed so that slave devices can be checked
    for loaded XDP programs in order to avoid the situation where both
    bond master and slave have programs loaded according to xdp_state.
    
    Signed-off-by: Jussi Maki <joamaki@gmail.com>
    joamaki authored and intel-lab-lkp committed Jul 7, 2021
  5. net: bonding: Refactor bond_xmit_hash for use with xdp_buff

    In preparation for adding XDP support to the bonding driver
    refactor the packet hashing functions to be able to work with
    any linear data buffer without an skb.
    
    Signed-off-by: Jussi Maki <joamaki@gmail.com>
    joamaki authored and intel-lab-lkp committed Jul 7, 2021

Commits on Jun 28, 2021

  1. Merge branch 'do_once_lite'

    Tanner Love says:
    
    ====================
    net: update netdev_rx_csum_fault() print dump only once
    
    First patch implements DO_ONCE_LITE to abstract uses of the ".data.once"
    trick. It is defined in its own, new header file  -- rather than
    alongside the existing DO_ONCE in include/linux/once.h -- because
    include/linux/once.h includes include/linux/jump_label.h, and this
    causes the build to break for some architectures if
    include/linux/once.h is included in include/linux/printk.h or
    include/asm-generic/bug.h.
    
    Second patch uses DO_ONCE_LITE in netdev_rx_csum_fault to print dump
    only once.
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  2. net: update netdev_rx_csum_fault() print dump only once

    Printing this stack dump multiple times does not provide additional
    useful information, and consumes time in the data path. Printing once
    is sufficient.
    
    Changes
      v2: Format indentation properly
    
    Signed-off-by: Tanner Love <tannerlove@google.com>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Mahesh Bandewar <maheshb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    tannerlove authored and davem330 committed Jun 28, 2021
  3. once: implement DO_ONCE_LITE for non-fast-path "do once" functionality

    Certain uses of "do once" functionality reside outside of fast path,
    and so do not require jump label patching via static keys, making
    existing DO_ONCE undesirable in such cases.
    
    Replace uses of __section(".data.once") with DO_ONCE_LITE(_IF)?
    
    This patch changes the return values of xfs_printk_once, printk_once,
    and printk_deferred_once. Before, they returned whether the print was
    performed, but now, they always return true. This is okay because the
    return values of the following macros are entirely ignored throughout
    the kernel:
    - xfs_printk_once
    - xfs_warn_once
    - xfs_notice_once
    - xfs_info_once
    - printk_once
    - pr_emerg_once
    - pr_alert_once
    - pr_crit_once
    - pr_err_once
    - pr_warn_once
    - pr_notice_once
    - pr_info_once
    - pr_devel_once
    - pr_debug_once
    - printk_deferred_once
    - orc_warn
    
    Changes
    v3:
      - Expand commit message to explain why changing return values of
        xfs_printk_once, printk_once, printk_deferred_once is benign
    v2:
      - Fix i386 build warnings
    
    Signed-off-by: Tanner Love <tannerlove@google.com>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Mahesh Bandewar <maheshb@google.com>
    Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    tannerlove authored and davem330 committed Jun 28, 2021
  4. net: sparx5: Do not use mac_addr uninitialized in mchp_sparx5_probe()

    Clang warns:
    
    drivers/net/ethernet/microchip/sparx5/sparx5_main.c:760:29: warning:
    variable 'mac_addr' is uninitialized when used here [-Wuninitialized]
            if (of_get_mac_address(np, mac_addr)) {
                                       ^~~~~~~~
    drivers/net/ethernet/microchip/sparx5/sparx5_main.c:669:14: note:
    initialize the variable 'mac_addr' to silence this warning
            u8 *mac_addr;
                        ^
                         = NULL
    1 warning generated.
    
    mac_addr is only used to store the value retrieved from
    of_get_mac_address(), which is then copied into the base_mac member of
    the sparx5 struct using ether_addr_copy(). It is easier to just use the
    base_mac address directly, which avoids the warning and the extra copy.
    
    Fixes: 3cfa11b ("net: sparx5: add the basic sparx5 driver")
    Link: ClangBuiltLinux#1413
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    nathanchance authored and davem330 committed Jun 28, 2021
  5. net: dsa: sja1105: fix dynamic access to L2 Address Lookup table for …

    …SJA1110
    
    The SJA1105P/Q/R/S and SJA1110 may have the same layout for the command
    to read/write/search for L2 Address Lookup entries, but as explained in
    the comments at the beginning of the sja1105_dynamic_config.c file, the
    command portion of the buffer is at the end, and we need to obtain a
    pointer to it by adding the length of the entry to the buffer.
    
    Alas, the length of an L2 Address Lookup entry is larger in SJA1110 than
    it is for SJA1105P/Q/R/S, so we need to create a common helper to access
    the command buffer, and this receives as argument the length of the
    entry buffer.
    
    Fixes: 3e77e59 ("net: dsa: sja1105: add support for the SJA1110 switch family")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  6. net: bridge: mrp: Update the Test frames for MRA

    According to the standard IEC 62439-2, in case the node behaves as MRA
    and needs to send Test frames on ring ports, then these Test frames need
    to have an Option TLV and a Sub-Option TLV which has the type AUTO_MGR.
    
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    HoratiuVultur authored and davem330 committed Jun 28, 2021
  7. Merge tag 'for-net-next-2021-06-28' of git://git.kernel.org/pub/scm/l…

    …inux/kernel/git/bluetooth/bluetooth-next
    
    Luiz Augusto von Dentz says:
    
    ====================
    bluetooth-next pull request for net-next:
    
     - Add support for QCA_ROME device (0cf3:e500) and RTL8822CE
     - Update management interface revision to 21
     - Use of incluse language
     - Proper handling of HCI_LE_Advertising_Set_Terminated event
     - Recovery handing of HCI ncmd=0
     - Various memory fixes
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  8. Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next

    Daniel Borkmann says:
    
    ====================
    pull-request: bpf-next 2021-06-28
    
    The following pull-request contains BPF updates for your *net-next* tree.
    
    We've added 37 non-merge commits during the last 12 day(s) which contain
    a total of 56 files changed, 394 insertions(+), 380 deletions(-).
    
    The main changes are:
    
    1) XDP driver RCU cleanups, from Toke Høiland-Jørgensen and Paul E. McKenney.
    
    2) Fix bpf_skb_change_proto() IPv4/v6 GSO handling, from Maciej Żenczykowski.
    
    3) Fix false positive kmemleak report for BPF ringbuf alloc, from Rustam Kovhaev.
    
    4) Fix x86 JIT's extable offset calculation for PROBE_LDX NULL, from Ravi Bangoria.
    
    5) Enable libbpf fallback probing with tracing under RHEL7, from Jonathan Edwards.
    
    6) Clean up x86 JIT to remove unused cnt tracking from EMIT macro, from Jiri Olsa.
    
    7) Netlink cleanups for libbpf to please Coverity, from Kumar Kartikeya Dwivedi.
    
    8) Allow to retrieve ancestor cgroup id in tracing programs, from Namhyung Kim.
    
    9) Fix lirc BPF program query to use user-provided prog_cnt, from Sean Young.
    
    10) Add initial libbpf doc including generated kdoc for its API, from Grant Seltzer.
    
    11) Make xdp_rxq_info_unreg_mem_model() more robust, from Jakub Kicinski.
    
    12) Fix up bpfilter startup log-level to info level, from Gary Lin.
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  9. ipv6: ICMPV6: add response to ICMPV6 RFC 8335 PROBE messages

    This patch builds off of commit 2b246b2
    and adds functionality to respond to ICMPV6 PROBE requests.
    
    Add icmp_build_probe function to construct PROBE requests for both
    ICMPV4 and ICMPV6.
    
    Modify icmpv6_rcv to detect ICMPV6 PROBE messages and call the
    icmpv6_echo_reply handler.
    
    Modify icmpv6_echo_reply to build a PROBE response message based on the
    queried interface.
    
    This patch has been tested using a branch of the iputils git repo which can
    be found here: https://github.com/Juniper-Clinic-2020/iputils/tree/probe-request
    
    Signed-off-by: Andreas Roeseler <andreas.a.roeseler@gmail.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    aroeseler authored and davem330 committed Jun 28, 2021
  10. net: sparx5: fix error return code in sparx5_register_notifier_blocks()

    Fix to return a negative error code from the error handling
    case instead of 0, as done elsewhere in this function.
    
    Fixes: d6fce51 ("net: sparx5: add switching support")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Yang Yingliang authored and davem330 committed Jun 28, 2021
  11. net: sparx5: fix return value check in sparx5_create_targets()

    In case of error, the function devm_ioremap() returns NULL pointer
    not ERR_PTR(). The IS_ERR() test in the return value check should
    be replaced with NULL test.
    
    Fixes: 3cfa11b ("net: sparx5: add the basic sparx5 driver")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Yang Yingliang authored and davem330 committed Jun 28, 2021
  12. net: sparx5: check return value after calling platform_get_resource()

    It will cause null-ptr-deref if platform_get_resource() returns NULL,
    we need check the return value.
    
    Fixes: 3cfa11b ("net: sparx5: add the basic sparx5 driver")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Yang Yingliang authored and davem330 committed Jun 28, 2021
  13. Merge tag 'mlx5-updates-2021-06-26' of git://git.kernel.org/pub/scm/l…

    …inux/kernel/git/saeed/linux
    
    Saeed Mahameed says:
    
    ====================
    mlx5-updates-2021-06-26
    
    This series provides small updates to mlx5 driver.
    
    1) Increase hairpin buffer size
    
    2) Improve peroformance in SF allocation
    
    3) Add IPsec support to uplink representor
    
    4) Add stats for number of deleted kTLS TX offloaded connections
    
    5) Add support for flow sampler in SW steering
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  14. Merge branch 'bridge-replay-helpers'

    Vladimir Oltean says:
    
    ====================
    Cleanup for the bridge replay helpers
    
    This patch series brings some improvements to the logic added to the
    bridge and DSA to handle LAG interfaces sandwiched between a bridge and
    a DSA switch port.
    
            br0
            /  \
           /    \
         bond0  swp2
         /  \
        /    \
      swp0  swp1
    
    In particular, it ensures that the switchdev object additions and
    deletions are well balanced per physical port. This is important for
    future work in the area of offloading local bridge FDB entries to
    hardware in the context of DSA requesting a replay of those entries at
    bridge join time (this will be submitted in a future patch series).
    Due to some difficulty ensuring that the deletion of local FDB entries
    pointing towards the bridge device itself is notified to switchdev in
    time (before the switchdev port disconnects from the bridge), this is
    potentially still not the final form in which the replay helpers will
    exist. I'm thinking about moving from the pull mode (in which DSA
    requests the replay) to a push mode (in which the bridge initiates the
    replay). Nonetheless, these preliminary changes are needed either way.
    
    The patch series also addresses some feedback from Nikolai which is long
    overdue by now (sorry).
    
    Switchdev driver maintainers were deliberately omitted due to the
    trivial nature of the driver changes (just a function prototype).
    
    Changes in v2:
    - fix build issue in patch 4 (function prototype mismatch)
    - move switchdev object unsync to the NETDEV_PRECHANGEUPPER code path
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  15. net: dsa: replay a deletion of switchdev objects for ports leaving a …

    …bridged LAG
    
    When a DSA switch port leaves a bonding interface that is under a
    bridge, there might be dangling switchdev objects on that port left
    behind, because the bridge is not aware that its lower interface (the
    bond) changed state in any way.
    
    Call the bridge replay helpers with adding=false before changing
    dp->bridge_dev to NULL, because we need to simulate to
    dsa_slave_port_obj_del() that these notifications were emitted by the
    bridge.
    
    We add this hook to the NETDEV_PRECHANGEUPPER event handler, because
    we are calling into switchdev (and the __switchdev_handle_port_obj_del
    fanout helpers expect the upper/lower adjacency lists to still be valid)
    and PRECHANGEUPPER is the last moment in time when they still are.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  16. net: dsa: refactor the prechangeupper sanity checks into a dedicated …

    …function
    
    We need to add more logic to the DSA NETDEV_PRECHANGEUPPER event
    handler, more exactly we need to request an unsync of switchdev objects.
    In order to fit more code, refactor the existing logic into a helper.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  17. net: bridge: allow the switchdev replay functions to be called for de…

    …letion
    
    When a switchdev port leaves a LAG that is a bridge port, the switchdev
    objects and port attributes offloaded to that port are not removed:
    
    ip link add br0 type bridge
    ip link add bond0 type bond mode 802.3ad
    ip link set swp0 master bond0
    ip link set bond0 master br0
    bridge vlan add dev bond0 vid 100
    ip link set swp0 nomaster
    
    VLAN 100 will remain installed on swp0 despite it going into standalone
    mode, because as far as the bridge is concerned, nothing ever happened
    to its bridge port.
    
    Let's extend the bridge vlan, fdb and mdb replay functions to take a
    'bool adding' argument, and make DSA and ocelot call the replay
    functions with 'adding' as false from the switchdev unsync path, for the
    switch port that leaves the bridge.
    
    Note that this patch in itself does not salvage anything, because in the
    current pull mode of operation, DSA still needs to call the replay
    helpers with adding=false. This will be done in another patch.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  18. net: bridge: constify variables in the replay helpers

    Some of the arguments and local variables for the newly added switchdev
    replay helpers can be const, so let's make them so.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  19. net: bridge: ignore switchdev events for LAG ports which didn't reque…

    …st replay
    
    There is a slight inconvenience in the switchdev replay helpers added
    recently, and this is when:
    
    ip link add br0 type bridge
    ip link add bond0 type bond
    ip link set bond0 master br0
    bridge vlan add dev bond0 vid 100
    ip link set swp0 master bond0
    ip link set swp1 master bond0
    
    Since the underlying driver (currently only DSA) asks for a replay of
    VLANs when swp0 and swp1 join the LAG because it is bridged, what will
    happen is that DSA will try to react twice on the VLAN event for swp0.
    This is not really a huge problem right now, because most drivers accept
    duplicates since the bridge itself does, but it will become a problem
    when we add support for replaying switchdev object deletions.
    
    Let's fix this by adding a blank void *ctx in the replay helpers, which
    will be passed on by the bridge in the switchdev notifications. If the
    context is NULL, everything is the same as before. But if the context is
    populated with a valid pointer, the underlying switchdev driver
    (currently DSA) can use the pointer to 'see through' the bridge port
    (which in the example above is bond0) and 'know' that the event is only
    for a particular physical port offloading that bridge port, and not for
    all of them.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  20. net: switchdev: add a context void pointer to struct switchdev_notifi…

    …er_info
    
    In the case where the driver asks for a replay of a certain type of
    event (port object or attribute) for a bridge port that is a LAG, it may
    do so because this port has just joined the LAG.
    
    But there might already be other switchdev ports in that LAG, and it is
    preferable that those preexisting switchdev ports do not act upon the
    replayed event.
    
    The solution is to add a context to switchdev events, which is NULL most
    of the time (when the bridge layer initiates the call) but which can be
    set to a value controlled by the switchdev driver when a replay is
    requested. The driver can then check the context to figure out if all
    ports within the LAG should act upon the switchdev event, or just the
    ones that match the context.
    
    We have to modify all switchdev_handle_* helper functions as well as the
    prototypes in the drivers that use these helpers too, because these
    helpers hide the underlying struct switchdev_notifier_info from us and
    there is no way to retrieve the context otherwise.
    
    The context structure will be populated and used in later patches.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  21. net: ocelot: delete call to br_fdb_replay

    Not using this driver, I did not realize it doesn't react to
    SWITCHDEV_FDB_{ADD,DEL}_TO_DEVICE notifications, but it implements just
    the bridge bypass operations (.ndo_fdb_{add,del}). So the call to
    br_fdb_replay just produces notifications that are ignored, delete it
    for now.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  22. net: bridge: include the is_local bit in br_fdb_replay

    Since commit 2c4eca3 ("net: bridge: switchdev: include local flag
    in FDB notifications"), the bridge emits SWITCHDEV_FDB_ADD_TO_DEVICE
    events with the is_local flag populated (but we ignore it nonetheless).
    
    We would like DSA to start treating this bit, but it is still not
    populated by the replay helper, so add it there too.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    vladimiroltean authored and davem330 committed Jun 28, 2021
  23. xdp: Move the rxq_info.mem clearing to unreg_mem_model()

    xdp_rxq_info_unreg() implicitly calls xdp_rxq_info_unreg_mem_model().
    This may well be confusing to the driver authors, and lead to double free
    if they call xdp_rxq_info_unreg_mem_model() before xdp_rxq_info_unreg()
    (when mem model type == MEM_TYPE_PAGE_POOL).
    
    In fact error path of mvpp2_rxq_init() seems to currently do exactly that.
    
    The double free will result in refcount underflow in page_pool_destroy().
    Make the interface a little more programmer friendly by clearing type and
    id so that xdp_rxq_info_unreg_mem_model() can be called multiple times.
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20210625221612.2637086-1-kuba@kernel.org
    Jakub Kicinski authored and borkmann committed Jun 28, 2021
  24. Merge branch 'bnxt_en-ptp'

    Michael Chan says:
    
    ====================
    bnxt_en: Add hardware PTP timestamping support on 575XX devices
    
    Add PTP RX and TX hardware timestamp support on 575XX devices.  These
    devices use the two-step method to implement the IEEE-1588 timestamping
    support.
    
    v2: Add spinlock to serialize access to the timecounter.
        Use .do_aux_work() for the periodic timer reading and to get the TX
        timestamp from the firmware.
        Propagate error code from ptp_clock_register().
        Make the 64-bit timer access safe on 32-bit CPUs.
        Read PHC using direct register access.
    ====================
    
    Signed-off-by: David S. Miller <davem@davemloft.net>
    davem330 committed Jun 28, 2021
  25. bnxt_en: Enable hardware PTP support

    Call bnxt_ptp_init() to initialize and register with the clock driver
    to enable PTP support.  Call bnxt_ptp_free() to unregister and clean
    up during shutdown.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Michael Chan authored and davem330 committed Jun 28, 2021
  26. bnxt_en: Transmit and retrieve packet timestamps

    Setup the TXBD to enable TX timestamp if requested.  At TX packet DMA
    completion, if we requested TX timestamp on that packet, we defer to
    .do_aux_work() to obtain the TX timestamp from the firmware before we
    free the TX SKB.
    
    v2: Use .do_aux_work() to get the TX timestamp from firmware.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Pavan Chebbi authored and davem330 committed Jun 28, 2021
  27. bnxt_en: Get the RX packet timestamp

    If the RX packet is timestamped by the hardware, the RX completion
    record will contain the lower 32-bit of the timestamp.  This needs
    to be combined with the upper 16-bit of the periodic timestamp that
    we get from the timer.  The previous snapshot in ptp->old_timer is
    used to make sure that the snapshot is not ahead of the RX timestamp
    and we adjust for wrap-around if needed.
    
    v2: Make ptp->old_time read access safe on 32-bit CPUs.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Pavan Chebbi authored and davem330 committed Jun 28, 2021
  28. bnxt_en: Get the full 48-bit hardware timestamp periodically

    From the bnxt_timer(), read the 48-bit hardware running clock
    periodically and store it in ptp->current_time.  The previous snapshot
    of the clock will be stored in ptp->old_time.  The old_time snapshot
    will be used in the next patches to compute the RX packet timestamps.
    
    v2: Use .do_aux_work() to read the timer periodically.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Pavan Chebbi authored and davem330 committed Jun 28, 2021
  29. bnxt_en: Add PTP clock APIs, ioctls, and ethtool methods

    Add the clock APIs to set/get/adjust the hw clock, and the related
    ioctls and ethtool methods.
    
    v2: Propagate error code from ptp_clock_register().
        Add spinlock to serialize access to the timecounter.  The
        timecounter is accessed in process context and the RX datapath.
        Read the PHC using direct registers.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Michael Chan authored and davem330 committed Jun 28, 2021
  30. bnxt_en: Get PTP hardware capability from firmware

    Store PTP hardware info in a structure if hardware and firmware support PTP.
    
    Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Michael Chan authored and davem330 committed Jun 28, 2021
Older