1. 09 Aug, 2021 13 commits
    • Joakim Zhang's avatar
      net: fec: fix build error for ARCH m68k · e08d6d42
      Joakim Zhang authored
      reproduce:
      	wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
      	chmod +x ~/bin/make.cross
      	make.cross ARCH=m68k  m5272c3_defconfig
      	make.cross ARCH=m68k
      
         drivers/net/ethernet/freescale/fec_main.c: In function 'fec_enet_eee_mode_set':
      >> drivers/net/ethernet/freescale/fec_main.c:2758:33: error: 'FEC_LPI_SLEEP' undeclared (first use in this function); did you mean 'FEC_ECR_SLEEP'?
          2758 |  writel(sleep_cycle, fep->hwp + FEC_LPI_SLEEP);
               |                                 ^~~~~~~~~~~~~
         arch/m68k/include/asm/io_no.h:25:66: note: in definition of macro '__raw_writel'
            25 | #define __raw_writel(b, addr) (void)((*(__force volatile u32 *) (addr)) = (b))
               |                                                                  ^~~~
         drivers/net/ethernet/freescale/fec_main.c:2758:2: note: in expansion of macro 'writel'
          2758 |  writel(sleep_cycle, fep->hwp + FEC_LPI_SLEEP);
               |  ^~~~~~
         drivers/net/ethernet/freescale/fec_main.c:2758:33: note: each undeclared identifier is reported only once for each function it appears in
          2758 |  writel(sleep_cycle, fep->hwp + FEC_LPI_SLEEP);
               |                                 ^~~~~~~~~~~~~
         arch/m68k/include/asm/io_no.h:25:66: note: in definition of macro '__raw_writel'
            25 | #define __raw_writel(b, addr) (void)((*(__force volatile u32 *) (addr)) = (b))
               |                                                                  ^~~~
         drivers/net/ethernet/freescale/fec_main.c:2758:2: note: in expansion of macro 'writel'
          2758 |  writel(sleep_cycle, fep->hwp + FEC_LPI_SLEEP);
               |  ^~~~~~
      >> drivers/net/ethernet/freescale/fec_main.c:2759:32: error: 'FEC_LPI_WAKE' undeclared (first use in this function)
          2759 |  writel(wake_cycle, fep->hwp + FEC_LPI_WAKE);
               |                                ^~~~~~~~~~~~
         arch/m68k/include/asm/io_no.h:25:66: note: in definition of macro '__raw_writel'
            25 | #define __raw_writel(b, addr) (void)((*(__force volatile u32 *) (addr)) = (b))
               |                                                                  ^~~~
         drivers/net/ethernet/freescale/fec_main.c:2759:2: note: in expansion of macro 'writel'
          2759 |  writel(wake_cycle, fep->hwp + FEC_LPI_WAKE);
               |  ^~~~~~
      
      This patch adds register definition for M5272 platform to pass build.
      
      Fixes: b82f8c3f ("net: fec: add eee mode tx lpi support")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e08d6d42
    • Stefan Raspl's avatar
      net/smc: Allow SMC-D 1MB DMB allocations · 67161779
      Stefan Raspl authored
      Commit a3fe3d01 ("net/smc: introduce sg-logic for RMBs") introduced
      a restriction for RMB allocations as used by SMC-R. However, SMC-D does
      not use scatter-gather lists to back its DMBs, yet it was limited by
      this restriction, still.
      This patch exempts SMC, but limits allocations to the maximum RMB/DMB
      size respectively.
      Signed-off-by: default avatarStefan Raspl <raspl@linux.ibm.com>
      Signed-off-by: default avatarGuvenc Gulce <guvenc@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      67161779
    • Leon Romanovsky's avatar
      devlink: Set device as early as possible · 919d13a7
      Leon Romanovsky authored
      All kernel devlink implementations call to devlink_alloc() during
      initialization routine for specific device which is used later as
      a parent device for devlink_register().
      
      Such late device assignment causes to the situation which requires us to
      call to device_register() before setting other parameters, but that call
      opens devlink to the world and makes accessible for the netlink users.
      
      Any attempt to move devlink_register() to be the last call generates the
      following error due to access to the devlink->dev pointer.
      
      [    8.758862]  devlink_nl_param_fill+0x2e8/0xe50
      [    8.760305]  devlink_param_notify+0x6d/0x180
      [    8.760435]  __devlink_params_register+0x2f1/0x670
      [    8.760558]  devlink_params_register+0x1e/0x20
      
      The simple change of API to set devlink device in the devlink_alloc()
      instead of devlink_register() fixes all this above and ensures that
      prior to call to devlink_register() everything already set.
      Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      919d13a7
    • Wei Yongjun's avatar
      wwan: mhi: Fix missing spin_lock_init() in mhi_mbim_probe() · 94c0a6fb
      Wei Yongjun authored
      The driver allocates the spinlock but not initialize it.
      Use spin_lock_init() on it to initialize it correctly.
      
      Fixes: aa730a99 ("net: wwan: Add MHI MBIM network driver")
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarWei Yongjun <weiyongjun1@huawei.com>
      Reviewed-by: default avatarSergey Ryazanov <ryazanov.s.a@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      94c0a6fb
    • David S. Miller's avatar
      Merge branch 'iucv-next' · 403fa186
      David S. Miller authored
      Karsten Graul says:
      
      ====================
      net/iucv: updates 2021-08-09
      
      Please apply the following iucv patches to netdev's net-next tree.
      
      Remove the usage of register asm statements and replace deprecated
      CPU-hotplug functions with the current version.
      Use use consume_skb() instead of kfree_skb() to avoid flooding
      dropwatch with false-positives, and 2 patches with cleanups.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      403fa186
    • Sebastian Andrzej Siewior's avatar
      net/iucv: Replace deprecated CPU-hotplug functions. · 8c39ed48
      Sebastian Andrzej Siewior authored
      The functions get_online_cpus() and put_online_cpus() have been
      deprecated during the CPU hotplug rework. They map directly to
      cpus_read_lock() and cpus_read_unlock().
      
      Replace deprecated CPU-hotplug functions with the official version.
      The behavior remains unchanged.
      
      Cc: Julian Wiedmann <jwi@linux.ibm.com>
      Cc: Karsten Graul <kgraul@linux.ibm.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Jakub Kicinski <kuba@kernel.org>
      Cc: linux-s390@vger.kernel.org
      Cc: netdev@vger.kernel.org
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8c39ed48
    • Heiko Carstens's avatar
      net/iucv: get rid of register asm usage · 50348fac
      Heiko Carstens authored
      Using register asm statements has been proven to be very error prone,
      especially when using code instrumentation where gcc may add function
      calls, which clobbers register contents in an unexpected way.
      
      Therefore get rid of register asm statements in iucv code, even though
      there is currently nothing wrong with it. This way we know for sure
      that the above mentioned bug class won't be introduced here.
      Acked-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      50348fac
    • Julian Wiedmann's avatar
      net/af_iucv: remove wrappers around iucv (de-)registration · ff8424be
      Julian Wiedmann authored
      These wrappers are just unnecessary obfuscation.
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ff8424be
    • Julian Wiedmann's avatar
      net/af_iucv: clean up a try_then_request_module() · 4eb9eda6
      Julian Wiedmann authored
      Use IS_ENABLED(CONFIG_IUCV) to determine whether the iucv_if symbol
      is available, and let depmod deal with the module dependency.
      
      This was introduced back with commit 6fcd61f7 ("af_iucv: use
      loadable iucv interface"). And to avoid sprinkling IS_ENABLED() over
      all the code, we're keeping the indirection through pr_iucv->...().
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4eb9eda6
    • Julian Wiedmann's avatar
      net/af_iucv: support drop monitoring · 10d6393d
      Julian Wiedmann authored
      Change the good paths to use consume_skb() instead of kfree_skb(). This
      avoids flooding dropwatch with false-positives.
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      10d6393d
    • David S. Miller's avatar
      Merge branch 'dsa-fast-ageing' · 00335237
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      DSA fast ageing fixes/improvements
      
      These are 2 small improvements brought to the DSA fast ageing changes
      merged earlier today.
      
      Patch 1 restores the behavior for DSA drivers that don't implement the
      .port_bridge_flags function (I don't think there is any breakage due
      to the new behavior, but just to be sure). This came as a result of
      Andrew's review.
      
      Patch 2 reduces the number of fast ages of a port from 2 to 1 when it
      leaves a bridge.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      00335237
    • Vladimir Oltean's avatar
      net: dsa: avoid fast ageing twice when port leaves a bridge · bee7c577
      Vladimir Oltean authored
      Drivers that support both the toggling of address learning and dynamic
      FDB flushing (mv88e6xxx, b53, sja1105) currently need to fast-age a port
      twice when it leaves a bridge:
      
      - once, when del_nbp() calls br_stp_disable_port() which puts the port
        in the BLOCKING state
      - twice, when dsa_port_switchdev_unsync_attrs() calls
        dsa_port_clear_brport_flags() which disables address learning
      
      The knee-jerk reaction might be to say "dsa_port_clear_brport_flags does
      not need to fast-age the port at all", but the thing is, we still need
      both code paths to flush the dynamic FDB entries in different situations.
      When a DSA switch port leaves a bonding/team interface that is (still) a
      bridge port, no del_nbp() will be called, so we rely on
      dsa_port_clear_brport_flags() function to restore proper standalone port
      functionality with address learning disabled.
      
      So the solution is just to avoid double the work when both code paths
      are called in series. Luckily, DSA already caches the STP port state, so
      we can skip flushing the dynamic FDB when we disable address learning
      and the STP state is one where no address learning takes place at all.
      Under that condition, not flushing the FDB is safe because there is
      supposed to not be any dynamic FDB entry at all (they were flushed
      during the transition towards that state, and none were learned in the
      meanwhile).
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bee7c577
    • Vladimir Oltean's avatar
      net: dsa: still fast-age ports joining a bridge if they can't configure learning · a4ffe09f
      Vladimir Oltean authored
      Commit 39f32101 ("net: dsa: don't fast age standalone ports")
      assumed that all standalone ports disable address learning, but if the
      switch driver implements .port_fast_age but not .port_bridge_flags (like
      ksz9477, ksz8795, lantiq_gswip, lan9303), then that might not actually
      be true.
      
      So whereas before, the bridge temporarily walking us through the
      BLOCKING STP state meant that the standalone ports had a checkpoint to
      flush their baggage and start fresh when they join a bridge, after that
      commit they no longer do.
      
      Restore the old behavior for these drivers by checking if the switch can
      toggle address learning. If it can't, disregard the "do_fast_age"
      argument and unconditionally perform fast ageing on STP state changes.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a4ffe09f
  2. 08 Aug, 2021 9 commits
    • David S. Miller's avatar
      Merge branch 'sja1105-fast-ageing' · cfe908c1
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      Fast ageing support for SJA1105 DSA driver
      
      While adding support for flushing dynamically learned FDB entries in the
      sja1105 driver, I noticed a few things that could be improved in DSA.
      Most notably, drivers could omit a fast age when address learning is
      turned off, which might mean that ports leaving a bridge and becoming
      standalone could still have FDB entries pointing towards them. Secondly,
      when DSA fast ages a port after the 'learning' flag has been turned off,
      the software bridge still has the dynamically learned 'master' FDB
      entries installed, and those should be deleted too.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cfe908c1
    • Vladimir Oltean's avatar
      net: dsa: sja1105: add FDB fast ageing support · 5126ec72
      Vladimir Oltean authored
      Delete the dynamically learned FDB entries when the STP state changes
      and when address learning is disabled.
      
      On sja1105 there is no shorthand SPI command for this, so we need to
      walk through the entire FDB to delete.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5126ec72
    • Vladimir Oltean's avatar
      net: dsa: sja1105: rely on DSA core tracking of port learning state · 5313a37b
      Vladimir Oltean authored
      Now that DSA keeps track of the port learning state, it becomes
      superfluous to keep an additional variable with this information in the
      sja1105 driver. Remove it.
      
      The DSA core's learning state is present in struct dsa_port *dp.
      To avoid the antipattern where we iterate through a DSA switch's
      ports and then call dsa_to_port to obtain the "dp" reference (which is
      bad because dsa_to_port iterates through the DSA switch tree once
      again), just iterate through the dst->ports and operate on those
      directly.
      
      The sja1105 had an extra use of priv->learn_ena on non-user ports. DSA
      does not touch the learning state of those ports - drivers are free to
      do what they wish on them. Mark that information with a comment in
      struct dsa_port and let sja1105 set dp->learning for cascade ports.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5313a37b
    • Vladimir Oltean's avatar
      net: dsa: flush the dynamic FDB of the software bridge when fast ageing a port · 9264e4ad
      Vladimir Oltean authored
      Currently, when DSA performs fast ageing on a port, 'bridge fdb' shows
      us that the 'self' entries (corresponding to the hardware bridge, as
      printed by dsa_slave_fdb_dump) are deleted, but the 'master' entries
      (corresponding to the software bridge) aren't.
      
      Indeed, searching through the bridge driver, neither the
      brport_attr_learning handler nor the IFLA_BRPORT_LEARNING handler call
      br_fdb_delete_by_port. However, br_stp_disable_port does, which is one
      of the paths which DSA uses to trigger a fast ageing process anyway.
      
      There is, however, one other very promising caller of
      br_fdb_delete_by_port, and that is the bridge driver's handler of the
      SWITCHDEV_FDB_FLUSH_TO_BRIDGE atomic notifier. Currently the s390/qeth
      HiperSockets card driver is the only user of this.
      
      I can't say I understand that driver's architecture or interaction with
      the bridge, but it appears to not be a switchdev driver in the traditional
      sense of the word. Nonetheless, the mechanism it provides is a useful
      way for DSA to express the fact that it performs fast ageing too, in a
      way that does not change the existing behavior for other drivers.
      
      Cc: Alexandra Winter <wintera@linux.ibm.com>
      Cc: Julian Wiedmann <jwi@linux.ibm.com>
      Cc: Roopa Prabhu <roopa@nvidia.com>
      Cc: Nikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9264e4ad
    • Vladimir Oltean's avatar
      net: dsa: don't fast age bridge ports with learning turned off · 4eab90d9
      Vladimir Oltean authored
      On topology changes, stations that were dynamically learned on ports
      that are no longer part of the active topology must be flushed - this is
      described by clause "17.11 Updating learned station location information"
      of IEEE 802.1D-2004.
      
      However, when address learning on the bridge port is turned off in the
      first place, there is nothing to flush, so skip a potentially expensive
      operation.
      
      We can finally do this now since DSA is aware of the learning state of
      its bridged ports.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4eab90d9
    • Vladimir Oltean's avatar
      net: dsa: centralize fast ageing when address learning is turned off · 045c45d1
      Vladimir Oltean authored
      Currently DSA leaves it down to device drivers to fast age the FDB on a
      port when address learning is disabled on it. There are 2 reasons for
      doing that in the first place:
      
      - when address learning is disabled by user space, through
        IFLA_BRPORT_LEARNING or the brport_attr_learning sysfs, what user
        space typically wants to achieve is to operate in a mode with no
        dynamic FDB entry on that port. But if the port is already up, some
        addresses might have been already learned on it, and it seems silly to
        wait for 5 minutes for them to expire until something useful can be
        done.
      
      - when a port leaves a bridge and becomes standalone, DSA turns off
        address learning on it. This also has the nice side effect of flushing
        the dynamically learned bridge FDB entries on it, which is a good idea
        because standalone ports should not have bridge FDB entries on them.
      
      We let drivers manage fast ageing under this condition because if DSA
      were to do it, it would need to track each port's learning state, and
      act upon the transition, which it currently doesn't.
      
      But there are 2 reasons why doing it is better after all:
      
      - drivers might get it wrong and not do it (see b53_port_set_learning)
      
      - we would like to flush the dynamic entries from the software bridge
        too, and letting drivers do that would be another pain point
      
      So track the port learning state and trigger a fast age process
      automatically within DSA.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      045c45d1
    • Jun Miao's avatar
      atm: horizon: Fix spelling mistakes in TX comment · 64ec13ec
      Jun Miao authored
      It's "must not", not "musn't", meaning "shall not".
      Let's fix that.
      Suggested-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJun Miao <jun.miao@windriver.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      64ec13ec
    • Leon Romanovsky's avatar
      devlink: Simplify devlink port API calls · 82564f6c
      Leon Romanovsky authored
      Devlink port already has pointer to the devlink instance and all API
      calls that forward these devlink ports to the drivers perform same
      "devlink_port->devlink" assignment before actual call.
      
      This patch removes useless parameter and allows us in the future
      to create specific devlink_port_ops to manage user space access with
      reliable ops assignment.
      Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      82564f6c
    • Vladimir Oltean's avatar
      net: dsa: don't fast age standalone ports · 39f32101
      Vladimir Oltean authored
      DSA drives the procedure to flush dynamic FDB entries from a port based
      on the change of STP state: whenever we go from a state where address
      learning is enabled (LEARNING, FORWARDING) to a state where it isn't
      (LISTENING, BLOCKING, DISABLED), we need to flush the existing dynamic
      entries.
      
      However, there are cases when this is not needed. Internally, when a
      DSA switch interface is not under a bridge, DSA still keeps it in the
      "FORWARDING" STP state. And when that interface joins a bridge, the
      bridge will meticulously iterate that port through all STP states,
      starting with BLOCKING and ending with FORWARDING. Because there is a
      state transition from the standalone version of FORWARDING into the
      temporary BLOCKING bridge port state, DSA calls the fast age procedure.
      
      Since commit 5e38c158 ("net: dsa: configure better brport flags when
      ports leave the bridge"), DSA asks standalone ports to disable address
      learning. Therefore, there can be no dynamic FDB entries on a standalone
      port. Therefore, it does not make sense to flush dynamic FDB entries on
      one.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      39f32101
  3. 07 Aug, 2021 7 commits
  4. 06 Aug, 2021 11 commits
    • Grygorii Strashko's avatar
      net: ethernet: ti: davinci_cpdma: revert "drop frame padding" · 35ba6abb
      Grygorii Strashko authored
      This reverts commit 9ffc513f ("net: ethernet: ti: davinci_cpdma: drop
      frame padding") which has depndency from not yet merged patch [1] and so
      breaks cpsw_new driver.
      
      [1] https://patchwork.kernel.org/project/netdevbpf/patch/20210805145511.12016-1-grygorii.strashko@ti.com/
      Fixes: 9ffc513f ("net: ethernet: ti: davinci_cpdma: drop frame padding")
      Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Link: https://lore.kernel.org/r/20210806142809.15069-1-grygorii.strashko@ti.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      35ba6abb
    • Dan Carpenter's avatar
      vrf: fix NULL dereference in vrf_finish_output() · 06669e68
      Dan Carpenter authored
      The "skb" pointer is NULL on this error path so we can't dereference it.
      Use "dev" instead.
      
      Fixes: 14ee70ca ("vrf: use skb_expand_head in vrf_finish_output")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Link: https://lore.kernel.org/r/20210806150435.GB15586@kiliSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      06669e68
    • DENG Qingfang's avatar
      net: dsa: mt7530: drop untagged frames on VLAN-aware ports without PVID · 8fbebef8
      DENG Qingfang authored
      The driver currently still accepts untagged frames on VLAN-aware ports
      without PVID. Use PVC.ACC_FRM to drop untagged frames in that case.
      Signed-off-by: default avatarDENG Qingfang <dqfext@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8fbebef8
    • David S. Miller's avatar
      Merge branch 'dsa-cpu-flood' · 9b9311af
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      Always flood multicast to the DSA CPU port
      
      Discussing with Qingfang, it became obvious that DSA is not prepared to
      disable multicast flooding towards the CPU port under any circumstance
      right now, and this in fact breaks traffic quite blatantly.
      
      This series is a revert done in reverse chronological order. These
      should be propagated to stable trees up to commit a8b659e7 ("net:
      dsa: act as passthrough for bridge port flags") which is in v5.12.
      For older kernels, that commit blocks further backporting, so I need to
      send a modified version of patch 3 separately to Greg after these go
      into "net".
      
      v1->v2: delete unused b53_set_mrouter function prototype
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9b9311af
    • Vladimir Oltean's avatar
      net: dsa: don't disable multicast flooding to the CPU even without an IGMP querier · c73c5708
      Vladimir Oltean authored
      Commit 08cc83cc ("net: dsa: add support for BRIDGE_MROUTER
      attribute") added an option for users to turn off multicast flooding
      towards the CPU if they turn off the IGMP querier on a bridge which
      already has enslaved ports (echo 0 > /sys/class/net/br0/bridge/multicast_router).
      
      And commit a8b659e7 ("net: dsa: act as passthrough for bridge port flags")
      simply papered over that issue, because it moved the decision to flood
      the CPU with multicast (or not) from the DSA core down to individual drivers,
      instead of taking a more radical position then.
      
      The truth is that disabling multicast flooding to the CPU is simply
      something we are not prepared to do now, if at all. Some reasons:
      
      - ICMP6 neighbor solicitation messages are unregistered multicast
        packets as far as the bridge is concerned. So if we stop flooding
        multicast, the outside world cannot ping the bridge device's IPv6
        link-local address.
      
      - There might be foreign interfaces bridged with our DSA switch ports
        (sending a packet towards the host does not necessarily equal
        termination, but maybe software forwarding). So if there is no one
        interested in that multicast traffic in the local network stack, that
        doesn't mean nobody is.
      
      - PTP over L4 (IPv4, IPv6) is multicast, but is unregistered as far as
        the bridge is concerned. This should reach the CPU port.
      
      - The switch driver might not do FDB partitioning. And since we don't
        even bother to do more fine-grained flood disabling (such as "disable
        flooding _from_port_N_ towards the CPU port" as opposed to "disable
        flooding _from_any_port_ towards the CPU port"), this breaks standalone
        ports, or even multiple bridges where one has an IGMP querier and one
        doesn't.
      
      Reverting the logic makes all of the above work.
      
      Fixes: a8b659e7 ("net: dsa: act as passthrough for bridge port flags")
      Fixes: 08cc83cc ("net: dsa: add support for BRIDGE_MROUTER attribute")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c73c5708
    • Vladimir Oltean's avatar
      net: dsa: mt7530: remove the .port_set_mrouter implementation · cbbf09b5
      Vladimir Oltean authored
      DSA's idea of optimizing out multicast flooding to the CPU port leaves
      quite a few holes open, so it should be reverted.
      
      The mt7530 driver is the only new driver which added a .port_set_mrouter
      implementation after the reorg from commit a8b659e7 ("net: dsa: act
      as passthrough for bridge port flags"), so it needs to be reverted
      separately so that the other revert commit can go a bit further down the
      git history.
      
      Fixes: 5a30833b ("net: dsa: mt7530: support MDB and bridge flag operations")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cbbf09b5
    • Vladimir Oltean's avatar
      net: dsa: stop syncing the bridge mcast_router attribute at join time · 7df4e744
      Vladimir Oltean authored
      Qingfang points out that when a bridge with the default settings is
      created and a port joins it:
      
      ip link add br0 type bridge
      ip link set swp0 master br0
      
      DSA calls br_multicast_router() on the bridge to see if the br0 device
      is a multicast router port, and if it is, it enables multicast flooding
      to the CPU port, otherwise it disables it.
      
      If we look through the multicast_router_show() sysfs or at the
      IFLA_BR_MCAST_ROUTER netlink attribute, we see that the default mrouter
      attribute for the bridge device is "1" (MDB_RTR_TYPE_TEMP_QUERY).
      
      However, br_multicast_router() will return "0" (MDB_RTR_TYPE_DISABLED),
      because an mrouter port in the MDB_RTR_TYPE_TEMP_QUERY state may not be
      actually _active_ until it receives an actual IGMP query. So, the
      br_multicast_router() function should really have been called
      br_multicast_router_active() perhaps.
      
      When/if an IGMP query is received, the bridge device will transition via
      br_multicast_mark_router() into the active state until the
      ip4_mc_router_timer expires after an multicast_querier_interval.
      
      Of course, this does not happen if the bridge is created with an
      mcast_router attribute of "2" (MDB_RTR_TYPE_PERM).
      
      The point is that in lack of any IGMP query messages, and in the default
      bridge configuration, unregistered multicast packets will not be able to
      reach the CPU port through flooding, and this breaks many use cases
      (most obviously, IPv6 ND, with its ICMP6 neighbor solicitation multicast
      messages).
      
      Leave the multicast flooding setting towards the CPU port down to a driver
      level decision.
      
      Fixes: 010e269f ("net: dsa: sync up switchdev objects and port attributes when joining the bridge")
      Reported-by: default avatarDENG Qingfang <dqfext@gmail.com>
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7df4e744
    • Grygorii Strashko's avatar
      net: ethernet: ti: am65-cpsw: use napi_complete_done() in TX completion · 3bacbe04
      Grygorii Strashko authored
      This patch enables support for hard irqs deferral feature from Eric Dumazet
      [1] for TI K3 CPSW driver by using napi_complete_done() in TX completion
      path.
      
      Depending on gro_flush_timeout and napi_defer_hard_irqs at gives up to 30%
      CPU utilization reduction:
      
      gro_flush_timeout=50000
      napi_defer_hard_irqs=2
      
      netperf -l 10 -H 192.168.1.1  -t UDP_STREAM -c -C -- -m 1470
      MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.1 () port 0 AF_INET
      Socket  Message  Elapsed      Messages                   CPU      Service
      Size    Size     Time         Okay Errors   Throughput   Util     Demand
      bytes   bytes    secs            #      #   10^6bits/sec % SS     us/KB
      
      before:
      212992    1470   10.00      809632      0      952.0     42.98    14.792
      212992           10.00      809630             952.0     50.66    8.719
      
      after:
      212992    1470   10.00      813686      0      956.8     32.14    11.009
      212992           10.00      813686             956.8     50.05    8.570
      
      [1] https://lore.kernel.org/netdev/20200422161329.56026-1-edumazet@google.com/Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3bacbe04
    • Vignesh Raghavendra's avatar
      net: ti: am65-cpsw-nuss: fix RX IRQ state after .ndo_stop() · 47bfc4d1
      Vignesh Raghavendra authored
      On TI K3 am64x platform the issue with RX IRQ is observed - it's become
      disabled forever after .ndo_stop(). The K3 CPSW driver manipulates RX IRQ
      by using standard Linux enable_irq()/disable_irq_nosync() API as there is
      no IRQ enable/disable options in CPSW HW itself, as result during
      .ndo_stop() following sequence happens
      
        phy_stop()
        teardown TX/RX channels
        wait for TX tdown complete
        napi_disable(TX)
        clean up TX channels
      
        (a)
      
        napi_disable(RX)
      
      At point (a) it's not possible to predict if RX IRQ was triggered or not.
      if RX IRQ was triggered then it also not possible to definitely say if RX
      NAPI was run or only scheduled and immediately canceled by
      napi_disable(RX). Actually the last case causes RX IRQ to be permanently
      disabled.
      
      Another observed issue is that RX IRQ enable counter become unbalanced if
      (gro_flush_timeout =! 0) while (napi_defer_hard_irqs == 0):
      
      Unbalanced enable for IRQ 44
      WARNING: CPU: 0 PID: 10 at ../kernel/irq/manage.c:776 __enable_irq+0x38/0x80
      __enable_irq+0x38/0x80
      enable_irq+0x54/0xb0
      am65_cpsw_nuss_rx_poll+0x2f4/0x368
      __napi_poll+0x34/0x1b8
      net_rx_action+0xe4/0x220
      _stext+0x11c/0x284
      run_ksoftirqd+0x4c/0x60
      
      To avoid above issues introduce flag indicating if RX was actually disabled
      before enabling it in am65_cpsw_nuss_rx_poll() and restore RX IRQ state in
      .ndo_open()
      
      Fixes: 4f7cce27 ("net: ethernet: ti: am65-cpsw: add support for am64x cpsw3g")
      Signed-off-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
      Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      47bfc4d1
    • David S. Miller's avatar
      Merge branch 'ptp-ocp-fixes' · 370cb73a
      David S. Miller authored
      Jonathan Lemon says:
      
      ====================
      ptp: ocp: assorted fixes.
      
      Assorted fixes for the ocp timecard.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      370cb73a
    • Jonathan Lemon's avatar
      ptp: ocp: Remove pending_image indicator from devlink · 8ef8ccbc
      Jonathan Lemon authored
      After writing an image blob to the flash memory, a reboot is required
      to reload the FPGA.  There is no versioning prsent in the FPGA image
      file, so only a running version is available.  The 'stored version'
      was set to 'pending' in order to indicate a reboot was needed.
      
      This isn't reliable, as the module could be unloaded/loaded, losing
      the "reboot needed" indicator.  Also, the devlink 'stored version'
      information is designed to refer to the actual image version.
      
      Unfortunately, there is no method to determine the flash image version
      other than booting it, so remove the devlink stored version setting.
      Signed-off-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8ef8ccbc