1. May 27, 2020
    • Andrew Lunn's avatar
      net: ethtool: Add generic parts of cable test TDR · 1a644de2
      Andrew Lunn authored
      
      
      Add the generic parts of the code used to trigger a cable test and
      return raw TDR data. Any PHY driver which support this must implement
      the new driver op.
      
      Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
      
      v2
      Update nxp-tja11xx for API change.
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1a644de2
    • Andrew Lunn's avatar
      net: ethtool: Add attributes for cable test TDR data · a331172b
      Andrew Lunn authored
      
      
      Some Ethernet PHYs can return the raw time domain reflectromatry data.
      Add the attributes to allow this data to be requested and returned via
      netlink ethtool.
      
      Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
      
      v2:
      m -> cm
      Report what the PHY actually used for start/stop/step.
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a331172b
    • Armin Wolf's avatar
      ne2k-pci: Fix various coding-style issues and improve printk() usage · 53c0ec4f
      Armin Wolf authored
      
      
      Fixed a ton of minor checkpatch errors/warnings and remove version
      printing at module init/when device is found and use MODULE_VERSION
      instead. Also modifying the RTL8029 PCI string to include the compatible
      RTL8029AS nic.
      The only mayor issue remaining is the missing SPDX tag, but since the
      exact version of the GPL is not stated anywhere inside the file, its
      impossible to add such a tag at the moment.
      But maybe it is possible, since 8390.h states Donald Becker's 8390
      drivers are licensed under GPL 2.2 only (= GPL-2.0-only ?).
      The kernel module containing this patch compiles and runs without
      problems on a RTL8029AS-based NE2000 clone card with kernel 5.7.0-rc6.
      
      Signed-off-by: default avatarArmin Wolf <W_Armin@gmx.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      53c0ec4f
    • Alexander Sverdlin's avatar
      macvlan: Skip loopback packets in RX handler · 81f3dc93
      Alexander Sverdlin authored
      
      
      Ignore loopback-originatig packets soon enough and don't try to process L2
      header where it doesn't exist. The very similar br_handle_frame() in bridge
      code performs exactly the same check.
      
      This is an example of such ICMPv6 packet:
      
      skb len=96 headroom=40 headlen=96 tailroom=56
      mac=(40,0) net=(40,40) trans=80
      shinfo(txflags=0 nr_frags=0 gso(size=0 type=0 segs=0))
      csum(0xae2e9a2f ip_summed=1 complete_sw=0 valid=0 level=0)
      hash(0xc97ebd88 sw=1 l4=1) proto=0x86dd pkttype=5 iif=24
      dev name=etha01.212 feat=0x0x0000000040005000
      skb headroom: 00000000: 00 7c 86 52 84 88 ff ff 00 00 00 00 00 00 08 00
      skb headroom: 00000010: 45 00 00 9e 5d 5c 40 00 40 11 33 33 00 00 00 01
      skb headroom: 00000020: 02 40 43 80 00 00 86 dd
      skb linear:   00000000: 60 09 88 bd 00 38 3a ff fe 80 00 00 00 00 00 00
      skb linear:   00000010: 00 40 43 ff fe 80 00 00 ff 02 00 00 00 00 00 00
      skb linear:   00000020: 00 00 00 00 00 00 00 01 86 00 61 00 40 00 00 2d
      skb linear:   00000030: 00 00 00 00 00 00 00 00 03 04 40 e0 00 00 01 2c
      skb linear:   00000040: 00 00 00 78 00 00 00 00 fd 5f 42 68 23 87 a8 81
      skb linear:   00000050: 00 00 00 00 00 00 00 00 01 01 02 40 43 80 00 00
      skb tailroom: 00000000: ...
      skb tailroom: 00000010: ...
      skb tailroom: 00000020: ...
      skb tailroom: 00000030: ...
      
      Call Trace, how it happens exactly:
       ...
       macvlan_handle_frame+0x321/0x425 [macvlan]
       ? macvlan_forward_source+0x110/0x110 [macvlan]
       __netif_receive_skb_core+0x545/0xda0
       ? enqueue_task_fair+0xe5/0x8e0
       ? __netif_receive_skb_one_core+0x36/0x70
       __netif_receive_skb_one_core+0x36/0x70
       process_backlog+0x97/0x140
       net_rx_action+0x1eb/0x350
       ? __hrtimer_run_queues+0x136/0x2e0
       __do_softirq+0xe3/0x383
       do_softirq_own_stack+0x2a/0x40
       </IRQ>
       do_softirq.part.4+0x4e/0x50
       netif_rx_ni+0x60/0xd0
       dev_loopback_xmit+0x83/0xf0
       ip6_finish_output2+0x575/0x590 [ipv6]
       ? ip6_cork_release.isra.1+0x64/0x90 [ipv6]
       ? __ip6_make_skb+0x38d/0x680 [ipv6]
       ? ip6_output+0x6c/0x140 [ipv6]
       ip6_output+0x6c/0x140 [ipv6]
       ip6_send_skb+0x1e/0x60 [ipv6]
       rawv6_sendmsg+0xc4b/0xe10 [ipv6]
       ? proc_put_long+0xd0/0xd0
       ? rw_copy_check_uvector+0x4e/0x110
       ? sock_sendmsg+0x36/0x40
       sock_sendmsg+0x36/0x40
       ___sys_sendmsg+0x2b6/0x2d0
       ? proc_dointvec+0x23/0x30
       ? addrconf_sysctl_forward+0x8d/0x250 [ipv6]
       ? dev_forward_change+0x130/0x130 [ipv6]
       ? _raw_spin_unlock+0x12/0x30
       ? proc_sys_call_handler.isra.14+0x9f/0x110
       ? __call_rcu+0x213/0x510
       ? get_max_files+0x10/0x10
       ? trace_hardirqs_on+0x2c/0xe0
       ? __sys_sendmsg+0x63/0xa0
       __sys_sendmsg+0x63/0xa0
       do_syscall_64+0x6c/0x1e0
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      Signed-off-by: default avatarAlexander Sverdlin <alexander.sverdlin@nokia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      81f3dc93
    • David S. Miller's avatar
      Merge branch 'mlxsw-Various-trap-changes-part-2' · 4fdd2dbc
      David S. Miller authored
      
      
      Ido Schimmel says:
      
      ====================
      mlxsw: Various trap changes - part 2
      
      This patch set contains another set of small changes in mlxsw trap
      configuration. It is the last set before exposing control traps (e.g.,
      IGMP query, ARP request) via devlink-trap.
      
      Tested with existing devlink-trap selftests. Please see individual
      patches for a detailed changelog.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4fdd2dbc
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Allow programming link-local prefix routes · 10d3757f
      Ido Schimmel authored
      
      
      The device has a trap for IPv6 packets that need be routed and have a
      unicast link-local destination IP (i.e., fe80::/10). This allows mlxsw
      to ignore link-local routes, as the packets will be trapped to the CPU
      in any case.
      
      However, since link-local routes are not programmed, it is possible for
      routed packets to hit the default route which might also be programmed
      to trap packets. This means that packets with a link-local destination
      IP might be trapped for the wrong reason.
      
      To overcome this, allow programming link-local prefix routes (usually
      one fe80::/64 per-table), so that the packets will be forwarded until
      reaching the link-local trap.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      10d3757f
    • Ido Schimmel's avatar
      mlxsw: spectrum: Add packet traps for BFD packets · 9785b92b
      Ido Schimmel authored
      
      
      Bidirectional Forwarding Detection (BFD) provides "low-overhead,
      short-duration detection of failures in the path between adjacent
      forwarding engines" (RFC 5880).
      
      This is accomplished by exchanging BFD packets between the two
      forwarding engines. Up until now these packets were trapped via the
      general local delivery (i.e., IP2ME) trap which also traps a lot of
      other packets that are not as time-sensitive as BFD packets.
      
      Expose dedicated traps for BFD packets so that user space could
      configure a dedicated policer for them.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9785b92b
    • Ido Schimmel's avatar
      mlxsw: spectrum: Treat IPv6 link-local SIP as an exception · dacc4e3a
      Ido Schimmel authored
      
      
      IPv6 packets that need to be forwarded and have a link-local source IP are
      dropped by the kernel and an ICMPv6 "Destination unreachable" is sent to
      the sending host.
      
      As such, change the trap group of such packets so that they do not
      interfere with IPv6 management packets. In the future this trap will be
      exposed as an exception via devlink-trap.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dacc4e3a
    • Ido Schimmel's avatar
      mlxsw: spectrum: Share one group for all locally delivered packets · 1260e083
      Ido Schimmel authored
      
      
      Routed IP packets with the Router Alert option need to be trapped to
      the CPU as they might need to be locally delivered to raw sockets with
      the IP_ROUTER_ALERT / IPV6_ROUTER_ALERT socket option.
      
      Move them to the same group with other packets that might need to be
      trapped following route lookup.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1260e083
    • Ido Schimmel's avatar
      mlxsw: reg: Move all trap groups under the same enum · 500769be
      Ido Schimmel authored
      
      
      After the previous patch the split is no longer necessary and all the
      trap groups can be moved under the same enum.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      500769be
    • Ido Schimmel's avatar
      mlxsw: spectrum_trap: Do not hard code "thin" policer identifier · b87bde80
      Ido Schimmel authored
      As explained in commit e6125230
      
       ("mlxsw: spectrum_trap: Introduce
      dummy group with thin policer"), the purpose of the "thin" policer is to
      pass as less packets as possible to the CPU.
      
      The identifier of this policer is currently set according to the maximum
      number of used trap groups, but this is fragile: On Spectrum-1 the
      maximum number of policers is less than the maximum number of trap
      groups, which might result in an invalid policer identifier in case the
      number of used trap groups grows beyond the policer limit.
      
      Solve this by dynamically allocating the policer identifier.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b87bde80
    • Ido Schimmel's avatar
      mlxsw: switchx2: Move SwitchX-2 trap groups out of main enum · 03cb0ce0
      Ido Schimmel authored
      
      
      The number of Spectrum trap groups is not infinite, but two identifiers
      are occupied by SwitchX-2 specific trap groups. Free these identifiers
      by moving them out of the main enum.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      03cb0ce0
    • Ido Schimmel's avatar
      mlxsw: spectrum: Reduce priority of locally delivered packets · 025b7de7
      Ido Schimmel authored
      
      
      To align with recent recommended values. Will be configurable by future
      patches.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      025b7de7
    • Ido Schimmel's avatar
      mlxsw: spectrum: Use same trap group for local routes and link-local destination · 1e3cd589
      Ido Schimmel authored
      
      
      Packets with an IPv6 link-local destination (i.e., fe80::/10) should not
      be forwarded and are therefore trapped to the CPU for local delivery.
      Since these packets are trapped for the same logical reason as packets
      hitting local routes, associate both traps with the same group.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1e3cd589
    • Ido Schimmel's avatar
      mlxsw: spectrum: Use separate trap group for FID miss · d322309d
      Ido Schimmel authored
      
      
      When a packet enters the device it is classified to a filtering
      identifier (FID) based on the ingress port and VLAN. The FID miss trap
      is used to trap packets for which a FID could not be found.
      
      In mlxsw this trap should only be triggered when a port is enslaved to
      an OVS bridge and a matching ACL rule could not be found, so as to
      trigger learning.
      
      These packets are therefore completely unrelated to packets hitting
      local routes and should be in a different group. Move them.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d322309d
    • Ido Schimmel's avatar
      mlxsw: spectrum: Use same trap group for various IPv6 packets · 954eef26
      Ido Schimmel authored
      
      
      Group these various IPv6 packets (e.g., router solicitations, router
      advertisement) together and subject them to the same policer.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      954eef26
    • Ido Schimmel's avatar
      mlxsw: spectrum: Rename IPv6 ND trap group · 412df3d1
      Ido Schimmel authored
      
      
      The IPv6 Neighbour Discovery (ND) group will be used for various IPv6
      packets, not all of which fall under the definition of ND, so rename it
      to "IPV6" which is more appropriate.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      412df3d1
    • Ido Schimmel's avatar
      mlxsw: spectrum: Use same switch case for identical groups · 761bc42f
      Ido Schimmel authored
      
      
      Trap groups that use the same policer settings can share the same switch
      case.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      761bc42f
    • Ido Schimmel's avatar
      mlxsw: spectrum: Use dedicated trap group for ACL trap · 3c2d8a04
      Ido Schimmel authored
      
      
      Packets that are trapped via tc's trap action are currently subject to
      the same policer as packets hitting local routes. The latter are
      critical to the correct functioning of the control plane, while the
      former are mainly used for traffic inspection.
      
      Split the ACL trap to a separate group with its own policer. Use a
      higher priority for these traps than for traps using mirror action
      (e.g., ARP, IGMP). Otherwise, packets matching both traps will not be
      forwarded in hardware (because of trap action) and also not forwarded in
      software because they will be marked with 'offload_fwd_mark'.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3c2d8a04
    • Florian Westphal's avatar
      mptcp: attempt coalescing when moving skbs to mptcp rx queue · 4e637c70
      Florian Westphal authored
      
      
      We can try to coalesce skbs we take from the subflows rx queue with the
      tail of the mptcp rx queue.
      
      If successful, the skb head can be discarded early.
      
      We can also free the skb extensions, we do not access them after this.
      
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4e637c70
    • Heiner Kallweit's avatar
      r8169: improve rtl_remove_one · 12b1bc75
      Heiner Kallweit authored
      
      
      Don't call netif_napi_del() manually, free_netdev() does this for us.
      In addition reorder calls to match reverse order of calls in probe().
      
      Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      12b1bc75
    • David S. Miller's avatar
      Merge branch 'net-ethernet-fec-move-GPR-register-offset-and-bit-into-DT' · 394fe485
      David S. Miller authored
      Fugang Duan says:
      
      ====================
      net: ethernet: fec: move GPR register offset and bit into DT
      
      The commit da722186
      
       (net: fec: set GPR bit on suspend by
      DT configuration) set the GPR reigster offset and bit in driver
      for wol feature support.
      
      It brings trouble to enable wol feature on imx6sx/imx6ul/imx7d
      platforms that have multiple ethernet instances with different
      GPR bit for stop mode control. So the patch set is to move GPR
      register offset and bit define into DT, and enable imx6q/imx6dl
      imx6qp/imx6sx/imx6ul/imx7d stop mode support.
      
      Currently, below NXP i.MX boards support wol:
      - imx6q/imx6dl/imx6qp sabresd
      - imx6sx sabreauto
      - imx7d sdb
      
      imx6q/imx6dl/imx6qp sabresd board dts file miss the property
      "fsl,magic-packet;", so patch#4 is to add the property for stop
      mode support.
      
      v1 -> v2:
       - driver: switch back to store the quirks bitmask in driver_data
       - dt-bindings: rename 'gpr' property string to 'fsl,stop-mode'
       - imx6/7 dtsi: add imx6sx/imx6ul/imx7d ethernet stop mode property
      v2 -> v3:
       - driver: suggested by Sascha Hauer, use a struct fec_devinfo for
         abstracting differences between different hardware variants,
         it can give more freedom to describe the differences.
       - imx6/7 dtsi: correct one typo pointed out by Andrew.
      
      Thanks Martin, Andrew and Sascha Hauer for the review.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      394fe485
    • Fugang Duan's avatar
      ARM: dts: imx6qdl-sabresd: enable fec wake-on-lan · f099b8b7
      Fugang Duan authored
      
      
      Enable ethernet wake-on-lan feature for imx6q/dl/qp sabresd
      boards since the PHY clock is supplied by external osc.
      
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarFugang Duan <fugang.duan@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f099b8b7
    • Fugang Duan's avatar
      ARM: dts: imx: add ethernet stop mode property · d009a621
      Fugang Duan authored
      
      
      - Update the imx6qdl gpr property to define gpr register
        offset and bit in DT.
      - Add imx6sx/imx6ul/imx7d ethernet stop mode property.
      
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarFugang Duan <fugang.duan@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d009a621
    • Fugang Duan's avatar
      dt-bindings: fec: update the gpr property · 998ec26b
      Fugang Duan authored
      
      
      - rename the 'gpr' property string to 'fsl,stop-mode'.
      - Update the property to define gpr register offset and
      bit in DT, since different instance have different gpr bit.
      
      v2:
       * rename 'gpr' property string to 'fsl,stop-mode'.
      
      Signed-off-by: default avatarFugang Duan <fugang.duan@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      998ec26b
    • Fugang Duan's avatar
      net: ethernet: fec: move GPR register offset and bit into DT · 8a448bf8
      Fugang Duan authored
      The commit da722186 (net: fec: set GPR bit on suspend by DT
      configuration) set the GPR reigster offset and bit in driver for
      wake on lan feature.
      
      But it introduces two issues here:
      - one SOC has two instances, they have different bit
      - different SOCs may have different offset and bit
      
      So to support wake-on-lan feature on other i.MX platforms, it should
      configure the GPR reigster offset and bit from DT.
      
      So the patch is to improve the commit da722186
      
       (net: fec: set GPR
      bit on suspend by DT configuration) to support multiple ethernet
      instances on i.MX series.
      
      v2:
       * switch back to store the quirks bitmask in driver_data
      v3:
       * suggested by Sascha Hauer, use a struct fec_devinfo for
         abstracting differences between different hardware variants,
         it can give more freedom to describe the differences.
      
      Signed-off-by: default avatarFugang Duan <fugang.duan@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8a448bf8
    • Dmitry Vyukov's avatar
      net/smc: mark smc_pnet_policy as const · 09d0310f
      Dmitry Vyukov authored
      
      
      Netlink policies are generally declared as const.
      This is safer and prevents potential bugs.
      
      Signed-off-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      09d0310f
    • David S. Miller's avatar
      Merge tag 'mac80211-next-for-net-next-2020-04-25' of... · 745bd6f4
      David S. Miller authored
      Merge tag 'mac80211-next-for-net-next-2020-04-25' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
      
      
      
      Johannes Berg says:
      
      ====================
      One batch of changes, containing:
       * hwsim improvements from Jouni and myself, to be able to
         test more scenarios easily
       * some more HE (802.11ax) support
       * some initial S1G (sub 1 GHz) work for fractional MHz channels
       * some (action) frame registration updates to help DPP support
       * along with other various improvements/fixes
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      745bd6f4
    • David S. Miller's avatar
      Merge branch 'net-phy-mscc-miim-reduce-waiting-time-between-MDIO-transactions' · 0e348119
      David S. Miller authored
      
      
      Antoine Tenart says:
      
      ====================
      net: phy: mscc-miim: reduce waiting time between MDIO transactions
      
      This series aims at reducing the waiting time between MDIO transactions
      when using the MSCC MIIM MDIO controller.
      
      I'm not sure we need patch 4/4 and we could reasonably drop it from the
      series. I'm including the patch as it could help to ensure the system
      is functional with a non optimal configuration.
      
      We needed to improve the driver's performances as when using a PHY
      requiring lots of registers accesses (such as the VSC85xx family),
      delays would add up and ended up to be quite large which would cause
      issues such as: a slow initialization of the PHY, and issues when using
      timestamping operations (this feature will be sent quite soon to the
      mailing lists).
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0e348119
    • Antoine Tenart's avatar
      net: phy: mscc-miim: read poll when high resolution timers are disabled · a021ada2
      Antoine Tenart authored
      
      
      The driver uses a read polling mechanism to check the status of the MDIO
      bus, to know if it is ready to accept next commands. This polling
      mechanism uses usleep_delay() under the hood between reads which is fine
      as long as high resolution timers are enabled. Otherwise the delays will
      end up to be much longer than expected.
      
      This patch fixes this by using udelay() under the hood when
      CONFIG_HIGH_RES_TIMERS isn't enabled. This increases CPU usage.
      
      Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a021ada2
    • Antoine Tenart's avatar
      net: phy: mscc-miim: improve waiting logic · d9c6de35
      Antoine Tenart authored
      
      
      The MSCC MIIM MDIO driver uses a waiting logic to wait for the MDIO bus
      to be ready to accept next commands. It does so by polling the BUSY
      status bit which indicates the MDIO bus has completed all pending
      operations. This can take time, and the controller supports writing the
      next command as soon as there are no pending commands (which happens
      while the MDIO bus is busy completing its current command).
      
      This patch implements this improved logic by adding an helper to poll
      the PENDING status bit, and by adjusting where we should wait for the
      bus to not be busy or to not be pending.
      
      Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
      Reviewed-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d9c6de35
    • Antoine Tenart's avatar
      net: phy: mscc-miim: remove redundant timeout check · f5112c8a
      Antoine Tenart authored
      
      
      readl_poll_timeout already returns -ETIMEDOUT if the condition isn't
      satisfied, there's no need to check again the condition after calling
      it. Remove the redundant timeout check.
      
      Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
      Reviewed-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f5112c8a
    • Antoine Tenart's avatar
      net: phy: mscc-miim: use more reasonable delays · 9513167e
      Antoine Tenart authored
      
      
      The MSCC MIIM MDIO driver uses delays to read poll a status register. I
      made multiple tests on a Ocelot PCS120 platform which led me to reduce
      those delays. The delay in between which the polling function is allowed
      to sleep is reduced from 100us to 50us which in almost all cases is a
      good value to succeed at the first retry. The overall delay is also
      lowered as the prior value was really way to high, 10000us is large
      enough.
      
      Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
      Reviewed-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9513167e
    • Russell King's avatar
      net: mdiobus: add clause 45 mdiobus accessors · 90ce665c
      Russell King authored
      
      
      There is a recurring pattern throughout some of the PHY code converting
      a devad and regnum to our packed clause 45 representation. Rather than
      having this scattered around the code, let's put a common translation
      function in mdio.h, and provide some register accessors.
      
      Convert the phylib core, phylink, bcm87xx and cortina to use these.
      
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      90ce665c
    • David S. Miller's avatar
      Merge branch 'flow-mpls' · 8928e19a
      David S. Miller authored
      
      
      Guillaume Nault says:
      
      ====================
      flow_dissector, cls_flower: Add support for multiple MPLS Label Stack Entries
      
      Currently, the flow dissector and the Flower classifier can only handle
      the first entry of an MPLS label stack. This patch series generalises
      the code to allow parsing and matching the Label Stack Entries that
      follow.
      
      Patch 1 extends the flow dissector to parse MPLS LSEs until the Bottom
      Of Stack bit is reached. The number of parsed LSEs is capped at
      FLOW_DIS_MPLS_MAX (arbitrarily set to 7). Flower and the NFP driver
      are updated to take into account the new layout of struct
      flow_dissector_key_mpls.
      
      Patch 2 extends Flower. It defines new netlink attributes, which are
      independent from the previous MPLS ones. Mixing the old and the new
      attributes in a same filter is not allowed. For backward compatibility,
      the old attributes are used when dumping filters that don't require the
      new ones.
      
      Changes since v2:
        * Fix compilation with the new MLX5 bareudp tunnel code.
      
      Changes since v1:
        * Fix compilation of NFP driver (kbuild test robot).
        * Fix sparse warning with entropy label (kbuild test robot).
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8928e19a
    • Guillaume Nault's avatar
      cls_flower: Support filtering on multiple MPLS Label Stack Entries · 61aec25a
      Guillaume Nault authored
      
      
      With struct flow_dissector_key_mpls now recording the first
      FLOW_DIS_MPLS_MAX labels, we can extend Flower to filter on any of
      these LSEs independently.
      
      In order to avoid creating new netlink attributes for every possible
      depth, let's define a new TCA_FLOWER_KEY_MPLS_OPTS nested attribute
      that contains the list of LSEs to match. Each LSE is represented by
      another attribute, TCA_FLOWER_KEY_MPLS_OPTS_LSE, which then contains
      the attributes representing the depth and the MPLS fields to match at
      this depth (label, TTL, etc.).
      
      For each MPLS field, the mask is always set to all-ones, as this is
      what the original API did. We could allow user configurable masks in
      the future if there is demand for more flexibility.
      
      The new API also allows to only specify an LSE depth. In that case,
      Flower only verifies that the MPLS label stack depth is greater or
      equal to the provided depth (that is, an LSE exists at this depth).
      
      Filters that only match on one (or more) fields of the first LSE are
      dumped using the old netlink attributes, to avoid confusing user space
      programs that don't understand the new API.
      
      Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      61aec25a
    • Guillaume Nault's avatar
      flow_dissector: Parse multiple MPLS Label Stack Entries · 58cff782
      Guillaume Nault authored
      
      
      The current MPLS dissector only parses the first MPLS Label Stack
      Entry (second LSE can be parsed too, but only to set a key_id).
      
      This patch adds the possibility to parse several LSEs by making
      __skb_flow_dissect_mpls() return FLOW_DISSECT_RET_PROTO_AGAIN as long
      as the Bottom Of Stack bit hasn't been seen, up to a maximum of
      FLOW_DIS_MPLS_MAX entries.
      
      FLOW_DIS_MPLS_MAX is arbitrarily set to 7. This should be enough for
      many practical purposes, without wasting too much space.
      
      To record the parsed values, flow_dissector_key_mpls is modified to
      store an array of stack entries, instead of just the values of the
      first one. A bit field, "used_lses", is also added to keep track of
      the LSEs that have been set. The objective is to avoid defining a
      new FLOW_DISSECTOR_KEY_MPLS_XX for each level of the MPLS stack.
      
      TC flower is adapted for the new struct flow_dissector_key_mpls layout.
      Matching on several MPLS Label Stack Entries will be added in the next
      patch.
      
      The NFP and MLX5 drivers are also adapted: nfp_flower_compile_mac() and
      mlx5's parse_tunnel() now verify that the rule only uses the first LSE
      and fail if it doesn't.
      
      Finally, the behaviour of the FLOW_DISSECTOR_KEY_MPLS_ENTROPY key is
      slightly modified. Instead of recording the first Entropy Label, it
      now records the last one. This shouldn't have any consequences since
      there doesn't seem to have any user of FLOW_DISSECTOR_KEY_MPLS_ENTROPY
      in the tree. We'd probably better do a hash of all parsed MPLS labels
      instead (excluding reserved labels) anyway. That'd give better entropy
      and would probably also simplify the code. But that's not the purpose
      of this patch, so I'm keeping that as a future possible improvement.
      
      Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      58cff782
    • David S. Miller's avatar
      Merge tag 'batadv-next-for-davem-20200526' of git://git.open-mesh.org/linux-merge · fb8ddaa9
      David S. Miller authored
      
      
      Simon Wunderlich says:
      
      ====================
      This cleanup patchset includes the following patches:
      
       - Fix revert dynamic lockdep key changes for batman-adv,
         by Sven Eckelmann
      
       - use rcu_replace_pointer() where appropriate, by Antonio Quartulli
      
       - Revert "disable ethtool link speed detection when auto negotiation
         off", by Sven Eckelmann
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fb8ddaa9
    • David S. Miller's avatar
      Merge branch 'tipc-add-some-improvements' · 6a862a44
      David S. Miller authored
      
      
      Tuong Lien says:
      
      ====================
      tipc: add some improvements
      
      This series adds some improvements to TIPC.
      
      The first patch improves the TIPC broadcast's performance with the 'Gap
      ACK blocks' mechanism similar to unicast before, while the others give
      support on tracing & statistics for broadcast links, and an alternative
      to carry broadcast retransmissions via unicast which might be useful in
      some cases.
      
      Besides, the Nagle algorithm can now automatically 'adjust' itself
      depending on the specific network condition a stream connection runs by
      the last patch.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6a862a44
    • Tuong Lien's avatar
      tipc: add test for Nagle algorithm effectiveness · 0a3e060f
      Tuong Lien authored
      
      
      When streaming in Nagle mode, we try to bundle small messages from user
      as many as possible if there is one outstanding buffer, i.e. not ACK-ed
      by the receiving side, which helps boost up the overall throughput. So,
      the algorithm's effectiveness really depends on when Nagle ACK comes or
      what the specific network latency (RTT) is, compared to the user's
      message sending rate.
      
      In a bad case, the user's sending rate is low or the network latency is
      small, there will not be many bundles, so making a Nagle ACK or waiting
      for it is not meaningful.
      For example: a user sends its messages every 100ms and the RTT is 50ms,
      then for each messages, we require one Nagle ACK but then there is only
      one user message sent without any bundles.
      
      In a better case, even if we have a few bundles (e.g. the RTT = 300ms),
      but now the user sends messages in medium size, then there will not be
      any difference at all, that says 3 x 1000-byte data messages if bundled
      will still result in 3 bundles with MTU = 1500.
      
      When Nagle is ineffective, the delay in user message sending is clearly
      wasted instead of sending directly.
      
      Besides, adding Nagle ACKs will consume some processor load on both the
      sending and receiving sides.
      
      This commit adds a test on the effectiveness of the Nagle algorithm for
      an individual connection in the network on which it actually runs.
      Particularly, upon receipt of a Nagle ACK we will compare the number of
      bundles in the backlog queue to the number of user messages which would
      be sent directly without Nagle. If the ratio is good (e.g. >= 2), Nagle
      mode will be kept for further message sending. Otherwise, we will leave
      Nagle and put a 'penalty' on the connection, so it will have to spend
      more 'one-way' messages before being able to re-enter Nagle.
      
      In addition, the 'ack-required' bit is only set when really needed that
      the number of Nagle ACKs will be reduced during Nagle mode.
      
      Testing with benchmark showed that with the patch, there was not much
      difference in throughput for small messages since the tool continuously
      sends messages without a break, so Nagle would still take in effect.
      
      Acked-by: default avatarYing Xue <ying.xue@windriver.com>
      Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
      Signed-off-by: default avatarTuong Lien <tuong.t.lien@dektech.com.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0a3e060f