1. 09 Dec, 2018 3 commits
    • David S. Miller's avatar
      Merge branch 'platform-data-controls-for-mdio-gpio' · 120d633f
      David S. Miller authored
      Andrew Lunn says:
      
      ====================
      platform data controls for mdio-gpio
      
      Soon to be mainlined is an x86 platform with a Marvell switch, and a
      bit-banging MDIO bus. In order to make this work, the phy_mask of the
      MDIO bus needs to be set to prevent scanning for PHYs, and the
      phy_ignore_ta_mask needs to be set because the switch has broken
      turnaround.
      
      Add a platform_data structure with these parameters.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      120d633f
    • Andrew Lunn's avatar
      net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data · dc9d38ce
      Andrew Lunn authored
      The Marvell 6390 Ethernet switch family does not perform MDIO
      turnaround correctly. Many hardware MDIO bus masters don't care about
      this, but the bitbangging implementation in Linux does by default. Add
      phy_ignore_ta_mask to the platform data so that the bitbangging code
      can be told which devices are known to get TA wrong.
      
      v2
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dc9d38ce
    • Andrew Lunn's avatar
      net: phy: mdio-gpio: Add platform_data support for phy_mask · 04fa26ba
      Andrew Lunn authored
      It is sometimes necessary to instantiate a bit-banging MDIO bus as a
      platform device, without the aid of device tree.
      
      When device tree is being used, the bus is not scanned for devices,
      only those devices which are in device tree are probed. Without device
      tree, by default, all addresses on the bus are scanned. This may then
      find a device which is not a PHY, e.g. a switch. And the switch may
      have registers containing values which look like a PHY. So during the
      scan, a PHY device is wrongly created.
      
      After the bus has been registered, a search is made for
      mdio_board_info structures which indicates devices on the bus, and the
      driver which should be used for them. This is typically used to
      instantiate Ethernet switches from platform drivers.  However, if the
      scanning of the bus has created a PHY device at the same location as
      indicated into the board info for a switch, the switch device is not
      created, since the address is already busy.
      
      This can be avoided by setting the phy_mask of the mdio bus. This mask
      prevents addresses on the bus being scanned.
      
      v2
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      04fa26ba
  2. 08 Dec, 2018 8 commits
    • Willem de Bruijn's avatar
      ip: silence udp zerocopy smatch false positive · 97ef7b4c
      Willem de Bruijn authored
      extra_uref is used in __ip(6)_append_data only if uarg is set.
      
      Smatch sees that the variable is passed to sock_zerocopy_put_abort.
      This function accesses it only when uarg is set, but smatch cannot
      infer this.
      
      Make this dependency explicit.
      
      Fixes: 52900d22 ("udp: elide zerocopy operation in hot path")
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      97ef7b4c
    • David S. Miller's avatar
      Merge branch 'tc-testing-next' · 83af01ba
      David S. Miller authored
      Lucas Bates says:
      
      ====================
      tc-testing: implement command timeouts and better results tracking
      
      Patch 1 adds a timeout feature for any command tdc launches in a subshell.
      This prevents tdc from hanging indefinitely.
      
      Patches 2-4 introduce a new method for tracking and generating test case
      results, and implements it across the core script and all applicable
      plugins.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      83af01ba
    • Lucas Bates's avatar
      tc-testing: gitignore, ignore generated test results · 8d189159
      Lucas Bates authored
      Ignore any .tap or .xml test result files generated by tdc.
      
      Additionally, ignore plugin symlinks.
      Signed-off-by: default avatarLucas Bates <lucasb@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8d189159
    • Lucas Bates's avatar
      tc-testing: Implement the TdcResults module in tdc · 915c158d
      Lucas Bates authored
      In tdc and the valgrind plugin, begin using the TdcResults module
      to track executed test cases.
      Signed-off-by: default avatarLucas Bates <lucasb@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      915c158d
    • Lucas Bates's avatar
      tc-testing: Add new TdcResults module · dfe465d3
      Lucas Bates authored
      This module includes new classes for tdc to use in keeping track
      of test case results, instead of generating and tracking a lengthy
      string.
      
      The new module can be extended to support multiple formal
      test result formats to be friendlier to automation.
      Signed-off-by: default avatarLucas Bates <lucasb@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dfe465d3
    • Lucas Bates's avatar
      tc-testing: Add command timeout feature to tdc · d37e56df
      Lucas Bates authored
      Using an attribute set in the tdc_config.py file, limit the
      amount of time tdc will wait for an executed command to
      complete and prevent the script from hanging entirely.
      
      This timeout will be applied to all executed commands.
      Signed-off-by: default avatarLucas Bates <lucasb@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d37e56df
    • yupeng's avatar
      net: call sk_dst_reset when set SO_DONTROUTE · 0fbe82e6
      yupeng authored
      after set SO_DONTROUTE to 1, the IP layer should not route packets if
      the dest IP address is not in link scope. But if the socket has cached
      the dst_entry, such packets would be routed until the sk_dst_cache
      expires. So we should clean the sk_dst_cache when a user set
      SO_DONTROUTE option. Below are server/client python scripts which
      could reprodue this issue:
      
      server side code:
      
      ==========================================================================
      import socket
      import struct
      import time
      
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.bind(('0.0.0.0', 9000))
      s.listen(1)
      sock, addr = s.accept()
      sock.setsockopt(socket.SOL_SOCKET, socket.SO_DONTROUTE, struct.pack('i', 1))
      while True:
          sock.send(b'foo')
          time.sleep(1)
      ==========================================================================
      
      client side code:
      ==========================================================================
      import socket
      import time
      
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.connect(('server_address', 9000))
      while True:
          data = s.recv(1024)
          print(data)
      ==========================================================================
      Signed-off-by: default avataryupeng <yupeng0921@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0fbe82e6
    • David Ahern's avatar
      neighbor: Improve garbage collection · 58956317
      David Ahern authored
      The existing garbage collection algorithm has a number of problems:
      
      1. The gc algorithm will not evict PERMANENT entries as those entries
         are managed by userspace, yet the existing algorithm walks the entire
         hash table which means it always considers PERMANENT entries when
         looking for entries to evict. In some use cases (e.g., EVPN) there
         can be tens of thousands of PERMANENT entries leading to wasted
         CPU cycles when gc kicks in. As an example, with 32k permanent
         entries, neigh_alloc has been observed taking more than 4 msec per
         invocation.
      
      2. Currently, when the number of neighbor entries hits gc_thresh2 and
         the last flush for the table was more than 5 seconds ago gc kicks in
         walks the entire hash table evicting *all* entries not in PERMANENT
         or REACHABLE state and not marked as externally learned. There is no
         discriminator on when the neigh entry was created or if it just moved
         from REACHABLE to another NUD_VALID state (e.g., NUD_STALE).
      
         It is possible for entries to be created or for established neighbor
         entries to be moved to STALE (e.g., an external node sends an ARP
         request) right before the 5 second window lapses:
      
              -----|---------x|----------|-----
                  t-5         t         t+5
      
         If that happens those entries are evicted during gc causing unnecessary
         thrashing on neighbor entries and userspace caches trying to track them.
      
         Further, this contradicts the description of gc_thresh2 which says
         "Entries older than 5 seconds will be cleared".
      
         One workaround is to make gc_thresh2 == gc_thresh3 but that negates the
         whole point of having separate thresholds.
      
      3. Clearing *all* neigh non-PERMANENT/REACHABLE/externally learned entries
         when gc_thresh2 is exceeded is over kill and contributes to trashing
         especially during startup.
      
      This patch addresses these problems as follows:
      
      1. Use of a separate list_head to track entries that can be garbage
         collected along with a separate counter. PERMANENT entries are not
         added to this list.
      
         The gc_thresh parameters are only compared to the new counter, not the
         total entries in the table. The forced_gc function is updated to only
         walk this new gc_list looking for entries to evict.
      
      2. Entries are added to the list head at the tail and removed from the
         front.
      
      3. Entries are only evicted if they were last updated more than 5 seconds
         ago, adhering to the original intent of gc_thresh2.
      
      4. Forced gc is stopped once the number of gc_entries drops below
         gc_thresh2.
      
      5. Since gc checks do not apply to PERMANENT entries, gc levels are skipped
         when allocating a new neighbor for a PERMANENT entry. By extension this
         means there are no explicit limits on the number of PERMANENT entries
         that can be created, but this is no different than FIB entries or FDB
         entries.
      Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      58956317
  3. 07 Dec, 2018 29 commits