1. 10 Jun, 2019 5 commits
    • Sebastian Andrzej Siewior's avatar
      net: Don't disable interrupts in __netdev_alloc_skb() · 92dcabd7
      Sebastian Andrzej Siewior authored
      __netdev_alloc_skb() can be used from any context and is used by NAPI
      and non-NAPI drivers. Non-NAPI drivers use it in interrupt context and
      NAPI drivers use it during initial allocation (->ndo_open() or
      ->ndo_change_mtu()). Some NAPI drivers share the same function for the
      initial allocation and the allocation in their NAPI callback.
      
      The interrupts are disabled in order to ensure locked access from every
      context to `netdev_alloc_cache'.
      
      Let __netdev_alloc_skb() check if interrupts are disabled. If they are, use
      `netdev_alloc_cache'. Otherwise disable BH and use `napi_alloc_cache.page'.
      The IRQ check is cheaper compared to disabling & enabling interrupts and
      memory allocation with disabled interrupts does not work on -RT.
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      92dcabd7
    • Sebastian Andrzej Siewior's avatar
      net: Don't disable interrupts in napi_alloc_frag() · 7ba7aeab
      Sebastian Andrzej Siewior authored
      netdev_alloc_frag() can be used from any context and is used by NAPI
      and non-NAPI drivers. Non-NAPI drivers use it in interrupt context
      and NAPI drivers use it during initial allocation (->ndo_open() or
      ->ndo_change_mtu()). Some NAPI drivers share the same function for the
      initial allocation and the allocation in their NAPI callback.
      
      The interrupts are disabled in order to ensure locked access from every
      context to `netdev_alloc_cache'.
      
      Let netdev_alloc_frag() check if interrupts are disabled. If they are,
      use `netdev_alloc_cache' otherwise disable BH and invoke
      __napi_alloc_frag() for the allocation. The IRQ check is cheaper
      compared to disabling & enabling interrupts and memory allocation with
      disabled interrupts does not work on -RT.
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7ba7aeab
    • David S. Miller's avatar
      Merge branch 'SFP-polling-fixes' · 9e49fe4d
      David S. Miller authored
      Robert Hancock says:
      
      ====================
      SFP polling fixes
      
      This has an updated version of an earlier patch to ensure that SFP
      operations are stopped during shutdown, and another patch suggested by
      Russell King to address a potential concurrency issue with SFP state
      checks.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9e49fe4d
    • Robert Hancock's avatar
      net: sfp: add mutex to prevent concurrent state checks · 2158e856
      Robert Hancock authored
      sfp_check_state can potentially be called by both a threaded IRQ handler
      and delayed work. If it is concurrently called, it could result in
      incorrect state management. Add a st_mutex to protect the state - this
      lock gets taken outside of code that checks and handle state changes, and
      the existing sm_mutex nests inside of it.
      Suggested-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: default avatarRobert Hancock <hancock@sedsystems.ca>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2158e856
    • Robert Hancock's avatar
      net: sfp: Stop SFP polling and interrupt handling during shutdown · 257c2559
      Robert Hancock authored
      SFP device polling can cause problems during the shutdown process if the
      parent devices of the network controller have been shut down already.
      This problem was seen on the iMX6 platform with PCIe devices, where
      accessing the device after the bus is shut down causes a hang.
      
      Free any acquired GPIO interrupts and stop all delayed work in the SFP
      driver during the shutdown process, so that we ensure that no pending
      operations are still occurring after the SFP shutdown completes.
      Signed-off-by: default avatarRobert Hancock <hancock@sedsystems.ca>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      257c2559
  2. 09 Jun, 2019 29 commits
  3. 08 Jun, 2019 6 commits
    • David S. Miller's avatar
      Merge branch 'PTP-support-for-the-SJA1105-DSA-driver' · 8d94a873
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      PTP support for the SJA1105 DSA driver
      
      This patchset adds the following:
      
       - A timecounter/cyclecounter based PHC for the free-running
         timestamping clock of this switch.
      
       - A state machine implemented in the DSA tagger for SJA1105, which
         keeps track of metadata follow-up Ethernet frames (the switch's way
         of transmitting RX timestamps).
      
      Clock manipulations on the actual hardware PTP clock will have to be
      implemented anyway, for the TTEthernet block and the time-based ingress
      policer.
      
      v3 patchset can be found at:
      https://lkml.org/lkml/2019/6/4/954
      
      Changes from v3:
      
      - Made it compile with the SJA1105 DSA driver and PTP driver as modules.
      
      - Reworked/simplified/fixed some issues in 03/17
        (dsa_8021q_remove_header) and added an ASCII image that
        illustrates the transformation that is taking place.
      
      - Removed a useless check for sja1105_is_link_local from 16/17 (RX
        timestamping) which also made previous 08/17 patch ("Move
        sja1105_is_link_local to include/linux") useless and therefore dropped.
      
      v2 patchset can be found at:
      https://lkml.org/lkml/2019/6/2/146
      
      Changes from v2:
      
      - Broke previous 09/10 patch (timestamping) into multiple smaller
        patches.
      
      - Every patch in the series compiles.
      
      v1 patchset can be found at:
      https://lkml.org/lkml/2019/5/28/1093
      
      Changes from v1:
      
      - Removed the addition of the DSA .can_timestamp callback.
      
      - Waiting for meta frames is done completely inside the tagger, and all
        frames emitted on RX are already partially timestamped.
      
      - Added a global data structure for the tagger common to all ports.
      
      - Made PTP work with ports in standalone mode, by limiting use of the
        DMAC-mangling "incl_srcpt" mode only when ports are bridged, aka when
        the DSA master is already promiscuous and can receive anything.
        Also changed meta frames to be sent at the 01-80-C2-00-00-0E DMAC.
      
      - Made some progress w.r.t. observed negative path delay.  Apparently it
        only appears when the delay mechanism is the delay request-response
        (end-to-end) one. If peer delay is used (-P), the path delay is
        positive and appears reasonable for an 1000Base-T link (485 ns in
        steady state).
      
        SJA1105 as PTP slave (OC) with E2E path delay:
      
      ptp4l[55.600]: master offset          8 s2 freq  +83677 path delay     -2390
      ptp4l[56.600]: master offset         17 s2 freq  +83688 path delay     -2391
      ptp4l[57.601]: master offset          6 s2 freq  +83682 path delay     -2391
      ptp4l[58.601]: master offset         -1 s2 freq  +83677 path delay     -2391
      
        SJA1105 as PTP slave (OC) with P2P path delay:
      
      ptp4l[48.343]: master offset          5 s2 freq  +83715 path delay       484
      ptp4l[48.468]: master offset         -3 s2 freq  +83705 path delay       485
      ptp4l[48.593]: master offset          0 s2 freq  +83708 path delay       485
      ptp4l[48.718]: master offset          1 s2 freq  +83710 path delay       485
      ptp4l[48.844]: master offset          1 s2 freq  +83710 path delay       485
      ptp4l[48.969]: master offset         -5 s2 freq  +83702 path delay       485
      ptp4l[49.094]: master offset          3 s2 freq  +83712 path delay       485
      ptp4l[49.219]: master offset          4 s2 freq  +83714 path delay       485
      ptp4l[49.344]: master offset         -5 s2 freq  +83702 path delay       485
      ptp4l[49.469]: master offset          3 s2 freq  +83713 path delay       487
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8d94a873
    • Vladimir Oltean's avatar
      net: dsa: sja1105: Expose PTP timestamping ioctls to userspace · a602afd2
      Vladimir Oltean authored
      This enables the PTP support towards userspace applications such as
      linuxptp.
      
      The switches can timestamp only trapped multicast MAC frames, and
      therefore only the profiles of 1588 over L2 are supported.
      
      TX timestamping can be enabled per port, but RX timestamping is enabled
      globally. As long as RX timestamping is enabled, the switch will emit
      metadata follow-up frames that will be processed by the tagger. It may
      be a problem that linuxptp does not restore the RX timestamping settings
      when exiting.
      Signed-off-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a602afd2
    • Vladimir Oltean's avatar
      net: dsa: sja1105: Add a state machine for RX timestamping · f3097be2
      Vladimir Oltean authored
      Meta frame reception relies on the hardware keeping its promise that it
      will send no other traffic towards the CPU port between a link-local
      frame and a meta frame.  Otherwise there is no other way to associate
      the meta frame with the link-local frame it's holding a timestamp of.
      The receive function is made stateful, and buffers a timestampable frame
      until its meta frame arrives, then merges the two, drops the meta and
      releases the link-local frame up the stack.
      Signed-off-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f3097be2
    • Vladimir Oltean's avatar
      net: dsa: sja1105: Increase priority of CPU-trapped frames · 08fde09a
      Vladimir Oltean authored
      Without noticing any particular issue, this patch ensures that
      management traffic is treated with the maximum priority on RX by the
      switch.  This is generally desirable, as the driver keeps a state
      machine that waits for metadata follow-up frames as soon as a management
      frame is received.  Increasing the priority helps expedite the reception
      (and further reconstruction) of the RX timestamp to the driver after the
      MAC has generated it.
      Signed-off-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      08fde09a
    • Vladimir Oltean's avatar
      net: dsa: sja1105: Add a global sja1105_tagger_data structure · 844d7edc
      Vladimir Oltean authored
      This will be used to keep state for RX timestamping. It is global
      because the switch serializes timestampable and meta frames when
      trapping them towards the CPU port (lower port indices have higher
      priority) and therefore having one state machine per port would create
      unnecessary complications.
      Signed-off-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      844d7edc
    • Vladimir Oltean's avatar
      net: dsa: sja1105: Receive and decode meta frames · e53e18a6
      Vladimir Oltean authored
      This adds support in the tagger for understanding the source port and
      switch id of meta frames.  Their timestamp is also extracted but not
      used yet - this needs to be done in a state machine that modifies the
      previously received timestampable frame - will be added in a follow-up
      patch.
      
      Also take the opportunity to:
      - Remove a comment in sja1105_filter made obsolete by e8d67fa5
        ("net: dsa: sja1105: Don't store frame type in skb->cb")
      - Reorder the checks in sja1105_filter to optimize for the most likely
        scenario first: regular traffic.
      Signed-off-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e53e18a6