1. 06 Mar, 2015 24 commits
    • David S. Miller's avatar
      Merge branch 'l3_hw_offload' · fabe7bed
      David S. Miller authored
      Scott Feldman says:
      
      ====================
      switchdev: add IPv4 routing offload
      
      v4:
      
        - Add NETIF_F_NETNS_LOCAL to rocker port feature list to keep rocker
          ports in the default netns.  Rocker hardware can't be partitioned
          to support multiple namespaces, currently.  It would be interesting
          to add netns support to rocker device by basically adding another
          match field to each table to match on some unique netns ID, with
          a port knowing it's netns ID.  Future work TDB.
        - Up-level the RTNH_F_EXTERNAL marking of routes installed to offload
          device from driver to switchdev common code.  Now driver can't skip
          routes.  Either it can install the route or it cannot.  Yes or No.
          If no on any route, all offloading is aborted by removing routes
          from offload device and setting ipv4.fib_offload_disabled so no more
          routes can be offloaded.  This is harsh, but it's our starting point.
          We can refine the policies in follow-up work.
        - Add new net.ipv4.fib_offload_disabled bool that is set if anything
          goes wrong with route offloading.  We can refine this later to make
          the setting per-device or per-device-port-netdev, but let's start
          here simple and refine in follow-up work.
        - Rebase against Alex's latest FIB changes.  I think I did everything
          correctly, and didn't run into any issues with testing, but I'd like
          Alex to look over the changes and maybe follow-up with any cleanups.
      
      v3:
      
      Changes based on v2 review comments:
      
        - Move check for custom rules up earlier in patch set, to keep git bisect
          safe.
        - Simplify the route add/modify failure handling to simple try until
          failure, and then on failure, undo everything.  The switchdev driver
          will return err when route can normally be installed to device, but
          the install fails for one reason or another (no space left on device,
          etc).  If a failure happens, uninstall all routes from the device,
          punting forwarding for all routes back to the kernel.
        - Scan route's full nexthop list, ensuring all nexthop devs belong
          to the same switchdev device, otherwise don't try to install route
          to device.
      
      v2:
      
      Changes based on v1 review comments and discussions at netconf:
      
        - Allow route modification, but use same ndo op used for adding route.
          Driver/device is expected to modify route in-place, if it can, to avoid
          interruption of service.
        - Add new RTNH_F_EXTERNAL flag to mark FIB entries offloaded externally.
        - Don't offload routes if using custom IP rules.  If routes are already
          offloaded, and custom IP rules are turned on, flush routes from offload
          device.  (Offloaded routes are marked with RTNH_F_EXTERNAL).
        - Use kernel's neigh resolution code to resolve route's nexthops' neigh
          MAC addrs.  (Thanks davem, works great!).
        - Use fib->fib_priority in rocker driver to give priorities to routes in
          OF-DPA unicast route table.
      
      v1:
      
      This patch set adds L3 routing offload support for IPv4 routes.  The idea is to
      mirror routes installed in the kernel's FIB down to a hardware switch device to
      offload the data forwarding path for L3.  Only the data forwarding path is
      intercepted.  Control and management of the kernel's FIB remains with the
      kernel.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fabe7bed
    • Scott Feldman's avatar
      rocker: implement IPv4 fib offloading · c1beeef7
      Scott Feldman authored
      The driver implements ndo_switch_fib_ipv4_add/del ops to add/del/mod IPv4
      routes to/from switchdev device.  Once a route is added to the device, and the
      route's nexthops are resolved to neighbor MAC address, the device will forward
      matching pkts rather than the kernel.  This offloads the L3 forwarding path
      from the kernel to the device.  Note that control and management planes are
      still mananged by Linux; only the data plane is offloaded.  Standard routing
      control protocols such as OSPF and BGP run on Linux and manage the kernel's FIB
      via standard rtm netlink msgs...nothing changes here.
      
      A new hash table is added to rocker to track neighbors.  The driver listens for
      neighbor updates events using netevent notifier NETEVENT_NEIGH_UPDATE.  Any ARP
      table updates for ports on this device are recorded in this table.  Routes
      installed to the device with nexthops that reference neighbors in this table
      are "qualified".  In the case of a route with nexthops not resolved in the
      table, the kernel is asked to resolve the nexthop.
      
      The driver uses fib_info->fib_priority for the priority field in rocker's
      unicast routing table.
      
      The device can only forward to pkts matching route dst to resolved nexthops.
      Currently, the device only supports single-path routes (i.e. routes with one
      nexthop).  Equal Cost Multipath (ECMP) route support will be added in followup
      patches.
      
      This patch is driver support for unicast IPv4 routing only.  Followup patches
      will add driver and infrastructure for IPv6 routing and multicast routing.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c1beeef7
    • Scott Feldman's avatar
      fib: hook IPv4 fib for hardware offload · 8e05fd71
      Scott Feldman authored
      Call into the switchdev driver any time an IPv4 fib entry is
      added/modified/deleted from the kernel's FIB.  The switchdev driver may or
      may not install the route to the offload device.  In the case where the
      driver tries to install the route and something goes wrong (device's routing
      table is full, etc), then all of the offloaded routes will be flushed from the
      device, route forwarding falls back to the kernel, and no more routes are
      offloading.
      
      We can refine this logic later.  For now, use the simplist model of offloading
      routes up to the point of failure, and then on failure, undo everything and
      mark IPv4 offloading disabled.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8e05fd71
    • Scott Feldman's avatar
      ipv4: add net bool fib_offload_disabled · 448b128a
      Scott Feldman authored
      If something goes wrong with IPv4 FIB offload, mark entire net offload
      disabled.  This is brute force policy to basically shut down IPv4 FIB offload
      permanently if there is a problem offloading any route to an external device.
      We can refine the policy in the future, to handle failures on a per-device or
      per-route basis, but for now, this policy is per-net.
      
      What we're trying to avoid is an inconsistent split between the kernel's FIB
      and the offload device's FIB.  We don't want the device to fwd a pkt
      inconsitent with what the kernel would do.  An example of a split is if device
      has 10.0.0.0/16 and kernel has 10.0.0.0/16 and 10.0.0.0/24, the device wouldn't
      see the longest prefix 10.0.0.0/24 and potentially forward pkts incorrectly.
      
      Limited capacity or limited capability are two ways a route may fail to install
      to the offload device.  We'll not differentiate between failures at this time,
      and treat any failure as fatal and mark the net as fib_offload_disabled.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      448b128a
    • Scott Feldman's avatar
      switchdev: implement IPv4 fib ndo wrappers · b5d6fbde
      Scott Feldman authored
      Flesh out ndo wrappers to call into device driver.  To call into device driver,
      the wrapper must interate over route's nexthops to ensure all nexthop devs
      belong to the same switch device.  Currently, there is no support for route's
      nexthops spanning offloaded and non-offloaded devices, or spanning ports of
      multiple offload devices.
      
      Since switch device ports may be stacked under virtual interfaces (bonds and/or
      bridges), and the route's nexthop may be on the virtual interface, the wrapper
      will traverse the nexthop dev down to the base dev.  It's the base dev that's
      passed to the switchdev driver's ndo ops.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b5d6fbde
    • Scott Feldman's avatar
      switchdev: don't support custom ip rules, for now · 104616e7
      Scott Feldman authored
      Keep switchdev FIB offload model simple for now and don't allow custom ip
      rules.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      104616e7
    • Scott Feldman's avatar
      switchdev: add IPv4 fib ndo ops wrappers · 5e8d9049
      Scott Feldman authored
      Add IPv4 fib ndo wrapper funcs and stub them out for now.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5e8d9049
    • Scott Feldman's avatar
      netdevice: add IPv4 fib add/del ops · 4586f1bb
      Scott Feldman authored
      Add two new ndo ops for IPv4 fib offload support, add and del.  Add uses
      modifiy semantics if fib entry already offloaded.  Drivers implementing the new
      ndo ops will return err<0 if programming device fails, for example if device's
      tables are full.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4586f1bb
    • Scott Feldman's avatar
      rtnetlink: add RTNH_F_EXTERNAL flag for fib offload · 37ed9493
      Scott Feldman authored
      Add new RTNH_F_EXTERNAL flag to mark fib entries offloaded externally, for
      example to a switchdev switch device.
      Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      37ed9493
    • Eric Dumazet's avatar
      tg3: use napi_complete_done() · 24d2e4a5
      Eric Dumazet authored
      Using napi_complete_done() instead of napi_complete() allows
      us to use /sys/class/net/ethX/gro_flush_timeout
      
      GRO layer can aggregate more packets if the flush is delayed a bit,
      without having to set too big coalescing parameters that impact
      latencies.
      
      Tested:
      
      lpx:~# echo 0 >/sys/class/net/eth1/gro_flush_timeout
      
      lpx:~# sar -n DEV 1 10 | grep eth1
      10:36:25 AM      eth1  81290.00  40617.00 120479.67   2777.01      0.00      0.00      0.00
      10:36:26 AM      eth1  81283.00  40608.00 120481.81   2778.13      0.00      0.00      1.00
      10:36:27 AM      eth1  81304.00  40639.00 120518.42   2778.28      0.00      0.00      0.00
      10:36:28 AM      eth1  81255.00  40605.00 120437.34   2775.95      0.00      0.00      1.00
      10:36:29 AM      eth1  81306.00  40630.00 120521.44   2777.70      0.00      0.00      0.00
      10:36:30 AM      eth1  81286.00  40564.00 120480.20   2773.31      0.00      0.00      0.00
      10:36:31 AM      eth1  81256.00  40599.00 120438.81   2776.27      0.00      0.00      0.00
      10:36:32 AM      eth1  81287.00  40594.00 120480.69   2776.69      0.00      0.00      0.00
      10:36:33 AM      eth1  81279.00  40601.00 120478.53   2775.84      0.00      0.00      0.00
      10:36:34 AM      eth1  81277.00  40610.00 120476.94   2776.25      0.00      0.00      0.00
      Average:         eth1  81282.30  40606.70 120479.39   2776.54      0.00      0.00      0.20
      
      lpx:~# echo 13000 >/sys/class/net/eth1/gro_flush_timeout
      
      lpx:~# sar -n DEV 1 10 | grep eth1
      10:36:43 AM      eth1  81257.00   7747.00 120437.44    530.00      0.00      0.00      0.00
      10:36:44 AM      eth1  81278.00   7748.00 120480.00    529.85      0.00      0.00      0.00
      10:36:45 AM      eth1  81282.00   7752.00 120479.09    531.09      0.00      0.00      0.00
      10:36:46 AM      eth1  81282.00   7751.00 120478.80    530.90      0.00      0.00      0.00
      10:36:47 AM      eth1  81276.00   7745.00 120478.31    529.64      0.00      0.00      0.00
      10:36:48 AM      eth1  81278.00   7747.00 120478.50    529.81      0.00      0.00      0.00
      10:36:49 AM      eth1  81282.00   7749.00 120478.88    530.01      0.00      0.00      0.00
      10:36:50 AM      eth1  81284.00   7751.00 120481.52    530.20      0.00      0.00      0.00
      10:36:51 AM      eth1  81299.00   7769.00 120481.74    533.81      0.00      0.00      0.00
      10:36:52 AM      eth1  81281.00   7748.00 120478.62    529.96      0.00      0.00      0.00
      Average:         eth1  81279.90   7750.70 120475.29    530.53      0.00      0.00      0.00
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Acked-by: default avatarMichael Chan <mchan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      24d2e4a5
    • David S. Miller's avatar
      Merge branch 'dsa-next' · 050f7dcd
      David S. Miller authored
      Florian Fainelli says:
      
      ====================
      net: dsa: code re-organization
      
      This pull request contains the first part of the patches required to implement
      the grand plan detailed here:
      
      http://www.spinics.net/lists/netdev/msg295942.html
      
      These are mostly code re-organization and function bodies re-arrangement to
      allow different callers of lower-level initialization functions for 'struct
      dsa_switch' and 'struct dsa_switch_tree' to be later introduced.
      
      There is no functional code change at this point.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      050f7dcd
    • Florian Fainelli's avatar
      net: dsa: extract dsa switch tree setup and removal · c86e59b9
      Florian Fainelli authored
      Extract the core logic that setups a 'struct dsa_switch_tree' and
      removes it, update dsa_probe() and dsa_remove() to use the two helper
      functions. This will be useful to allow for other callers to setup
      this structure differently.
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c86e59b9
    • Florian Fainelli's avatar
      net: dsa: let switches specify their tagging protocol · 59299031
      Florian Fainelli authored
      In order to support the new DSA device driver model, a dsa_switch should
      be able to advertise the type of tagging protocol supported by the
      underlying switch device. This also removes constraints on how tagging
      can be stacked to each other.
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      59299031
    • Florian Fainelli's avatar
      net: dsa: split dsa_switch_setup into two functions · df197195
      Florian Fainelli authored
      Split the part of dsa_switch_setup() which is responsible for allocating
      and initializing a 'struct dsa_switch' and the part which is doing a
      given switch device setup and slave network device creation.
      
      This is a preliminary change to allow a separate caller of
      dsa_switch_setup_one() which may have externally initialized the
      dsa_switch structure, outside of dsa_switch_setup().
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      df197195
    • Florian Fainelli's avatar
      net: dsa: allow deferred probing · b324c07a
      Florian Fainelli authored
      In preparation for allowing a different model to register DSA switches,
      update dsa_of_probe() and dsa_probe() to return -EPROBE_DEFER where
      appropriate.
      
      Failure to find a phandle or Device Tree property is still fatal, but
      looking up the internal device structure associated with a Device Tree
      node is something that might need to be delayed based on driver probe
      ordering.
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b324c07a
    • Florian Fainelli's avatar
      net: dsa: update dsa_of_{probe, remove} to use a device pointer · f1a26a06
      Florian Fainelli authored
      In preparation for allowing a different mechanism to register DSA switch
      devices and driver, update dsa_of_probe and dsa_of_remove to take a
      struct device pointer since neither of these two functions uses the
      struct platform_device pointer.
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f1a26a06
    • Eric Dumazet's avatar
      inet_diag: remove duplicate code from inet_twsk_diag_dump() · 49612729
      Eric Dumazet authored
      timewait sockets now share a common base with established sockets.
      
      inet_twsk_diag_dump() can use inet_diag_bc_sk() instead of duplicating
      code, granted that inet_diag_bc_sk() does proper userlocks
      initialization.
      
      twsk_build_assert() will catch any future changes that could break
      the assumptions.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      49612729
    • Jeff Kirsher's avatar
      i40e: Fix mismatching type for ioremap_len · e815665e
      Jeff Kirsher authored
      As pointed out by Ben Hutchings, ioremap uses unsigned long as
      its parameter type, so we should be using that instead of u32
      or int.
      Reported-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e815665e
    • Erik Hugne's avatar
      tipc: add ip/udp media type · d0f91938
      Erik Hugne authored
      The ip/udp bearer can be configured in a point-to-point
      mode by specifying both local and remote ip/hostname,
      or it can be enabled in multicast mode, where links are
      established to all tipc nodes that have joined the same
      multicast group. The multicast IP address is generated
      based on the TIPC network ID, but can be overridden by
      using another multicast address as remote ip.
      Signed-off-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d0f91938
    • Erik Hugne's avatar
      tipc: increase size of tipc discovery messages · 948fa2d1
      Erik Hugne authored
      The payload area following the TIPC discovery message header is an
      opaque area defined by the media. INT_H_SIZE was enough for
      Ethernet/IB/IPv4 but needs to be expanded to carry IPv6 addressing
      information.
      Signed-off-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      948fa2d1
    • WANG Cong's avatar
      net_sched: move tp->root allocation into fw_init() · 33f8b9ec
      WANG Cong authored
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      33f8b9ec
    • WANG Cong's avatar
      net_sched: move tp->root allocation into route4_init() · a05c2d11
      WANG Cong authored
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a05c2d11
    • David S. Miller's avatar
      Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next · 2490c65f
      David S. Miller authored
      Jeff Kirsher says:
      
      ====================
      This series contains updates to i40e only.
      
      Greg provides fixes for the NPAR transmit scheduler where the driver
      initialization caused the BW configurations to not take effect, so use
      a BW configuration read and write back to "kick" the transmit scheduler
      into action.  Fixes the ethtool offline test, where we were not actually
      taking the device offline before doing the testing.
      
      Matt modifies the get and set LED functions so they ignore activity LEDs
      since we are required to blink the link LEDs only.
      
      Neerav provides a workaround for whenever a DCBX configuration is changed,
      where the firmware doe not set the operational status bit of the
      application TLV status as returned from the "Get CEE DCBX Oper Cfg" admin
      queue command.  So remove the check for the operational and sync bits of
      the application TLV status until a firmware fix is provided.
      
      Shannon changes the driver to grab the NVM devstarter version and not
      the image version, since it is the more useful version and is what
      should be displayed.  Moves the IRQ tracking setup and tear down into
      the same routines that do the IRQ setup and tear down.  This keeps
      like activities together and allows us to track exactly the number
      of vectors reserved from the OS, which may be fewer than are available
      from the hardware.
      
      Jesse provides a fix to use a more portable sign extension by replacing
      0xffff.... with ~(u64)0 or ~(u32)0.  Also fixes XPS mask when resetting,
      where the driver would accidentally clear the XPS mask for all queues
      back to 0.  This caused higher CPU utilization and had some other
      performance impacts for transmit tests.  Cleans up some whitespace
      formatting.
      
      Catherine provides a fix where some firmware versions are incorrectly
      reporting a breakout cable as PHY type 0x3 when it should be 0x16
      (I40E_PHY_TYPE_10GBASE_SFPP_CU).  Adds the 10G and 40G AOC PHY types
      to the case statement in get_media_type and ethtool get_settings so
      that the correct information gets reported back to the user.
      
      Anjali provides IOREMAP changes for future device support, where we
      do not want to map the whole CSR space since some of it is mapped by
      other drivers with different mapping methods.
      
      Mitch changes the i40e driver to not "spam" the system log with
      messages about VF VSI when VFs are created and when they are reset to
      reduce user annoyance.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2490c65f
    • Stephen Rothwell's avatar
      mpls: using vzalloc requires including vmalloc.h · 4b5edb2f
      Stephen Rothwell authored
      Fixes this build error:
      
      net/mpls/af_mpls.c: In function 'resize_platform_label_table':
      net/mpls/af_mpls.c:767:4: error: implicit declaration of function 'vzalloc' [-Werror=implicit-function-declaration]
          labels = vzalloc(size);
          ^
      
      Fixes: 7720c01f ("mpls: Add a sysctl to control the size of the mpls label table")
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4b5edb2f
  2. 05 Mar, 2015 16 commits