1. 06 11月, 2014 21 次提交
    • L
      amd-xgbe: Provide support for receive side scaling · 5b9dfe29
      Lendacky, Thomas 提交于
      This patch provides support for receive side scaling (RSS). RSS allows
      for spreading incoming network packets across the Rx queues.  When used
      in conjunction with the per DMA channel interrupt support, this allows
      the receive processing to be spread across multiple processors.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5b9dfe29
    • L
      amd-xgbe: Add support for per DMA channel interrupts · 9227dc5e
      Lendacky, Thomas 提交于
      This patch provides support for interrupts that are generated by the
      Tx/Rx DMA channel pairs of the device.  This allows for Tx and Rx
      processing to run across multiple processsors.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9227dc5e
    • L
      amd-xgbe: Implement split header receive support · 174fd259
      Lendacky, Thomas 提交于
      Provide support for splitting IP packets so that the header and
      payload can be sent to different DMA addresses.  This will allow
      the IP header to be put into the linear part of the skb while the
      payload can be added as frags.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      174fd259
    • L
      amd-xgbe: Use page allocations for Rx buffers · 08dcc47c
      Lendacky, Thomas 提交于
      Use page allocations for Rx buffers instead of pre-allocating skbs
      of a set size.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      08dcc47c
    • L
      amd-xgbe: Use the u32 data type for descriptors · aa96bd3c
      Lendacky, Thomas 提交于
      The Tx and Rx descriptors are unsigned 32 bit values.  Use the u32
      type, rather than unsigned int, to map these descriptors.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      aa96bd3c
    • L
      amd-xgbe: Rename pre_xmit function to dev_xmit · a9d41981
      Lendacky, Thomas 提交于
      The pre_xmit function name implies that it performs operations prior
      to transmitting the packet when in fact it is responsible for setting
      up the descriptors and initiating the transmit.  Rename this to
      function from pre_xmit to dev_xmit, which is consistent with the name
      used during receive processing - dev_read.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a9d41981
    • L
      amd-xgbe: Move ring allocation to device open · 4780b7ca
      Lendacky, Thomas 提交于
      Move the channel and ring tracking structures allocation to device
      open.  This will allow for future support to vary the number of Tx/Rx
      queues without unloading the module.
      Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4780b7ca
    • W
      ipv6: move INET6_MATCH() to include/net/inet6_hashtables.h · 25de4668
      WANG Cong 提交于
      It is only used in net/ipv6/inet6_hashtables.c.
      
      Cc: David S. Miller <davem@davemloft.net>
      Signed-off-by: NCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      25de4668
    • D
      net: Add and use skb_copy_datagram_msg() helper. · 51f3d02b
      David S. Miller 提交于
      This encapsulates all of the skb_copy_datagram_iovec() callers
      with call argument signature "skb, offset, msghdr->msg_iov, length".
      
      When we move to iov_iters in the networking, the iov_iter object will
      sit in the msghdr.
      
      Having a helper like this means there will be less places to touch
      during that transformation.
      
      Based upon descriptions and patch from Al Viro.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      51f3d02b
    • D
      Merge branch 'gue-next' · 1d76c1d0
      David S. Miller 提交于
      Tom Herbert says:
      
      ====================
      gue: Remote checksum offload
      
      This patch set implements remote checksum offload for
      GUE, which is a mechanism that provides checksum offload of
      encapsulated packets using rudimentary offload capabilities found in
      most Network Interface Card (NIC) devices. The outer header checksum
      for UDP is enabled in packets and, with some additional meta
      information in the GUE header, a receiver is able to deduce the
      checksum to be set for an inner encapsulated packet. Effectively this
      offloads the computation of the inner checksum. Enabling the outer
      checksum in encapsulation has the additional advantage that it covers
      more of the packet than the inner checksum including the encapsulation
      headers.
      
      Remote checksum offload is described in:
      http://tools.ietf.org/html/draft-herbert-remotecsumoffload-01
      
      The GUE transmit and receive paths are modified to support the
      remote checksum offload option. The option contains a checksum
      offset and checksum start which are directly derived from values
      set in stack when doing CHECKSUM_PARTIAL. On receipt of the option, the
      operation is to calculate the packet checksum from "start" to end of
      the packet (normally derived for checksum complete), and then set
      the resultant value at checksum "offset" (the checksum field has
      already been primed with the pseudo header). This emulates a NIC
      that implements NETIF_F_HW_CSUM.
      
      The primary purpose of this feature is to eliminate cost of performing
      checksum calculation over a packet when encpasulating.
      
      In this patch set:
        - Move fou_build_header into fou.c and split it into a couple of
          functions
        - Enable offloading of outer UDP checksum in encapsulation
        - Change udp_offload to support remote checksum offload, includes
          new GSO type and ensuring encapsulated layers (TCP) doesn't try to
          set a checksum covered by RCO
        - TX support for RCO with GUE. This is configured through ip_tunnel
          and set the option on transmit when packet being encapsulated is
          CHECKSUM_PARTIAL
        - RX support for RCO with GUE for normal and GRO paths. Includes
          resolving the offloaded checksum
      
      v2:
        Address comments from davem: Move accounting for private option
        field in gue_encap_hlen to patch in which we add the remote checksum
        offload option.
      
      Testing:
      
      I ran performance numbers using netperf TCP_STREAM and TCP_RR with 200
      streams, comparing GUE with and without remote checksum offload (doing
      checksum-unnecessary to complete conversion in both cases). These
      were run on mlnx4 and bnx2x. Some mlnx4 results are below.
      
      GRE/GUE
          TCP_STREAM
            IPv4, with remote checksum offload
              9.71% TX CPU utilization
              7.42% RX CPU utilization
              36380 Mbps
            IPv4, without remote checksum offload
              12.40% TX CPU utilization
              7.36% RX CPU utilization
              36591 Mbps
          TCP_RR
            IPv4, with remote checksum offload
              77.79% CPU utilization
      	91/144/216 90/95/99% latencies
              1.95127e+06 tps
            IPv4, without remote checksum offload
              78.70% CPU utilization
              89/152/297 90/95/99% latencies
              1.95458e+06 tps
      
      IPIP/GUE
          TCP_STREAM
            With remote checksum offload
              10.30% TX CPU utilization
              7.43% RX CPU utilization
              36486 Mbps
            Without remote checksum offload
              12.47% TX CPU utilization
              7.49% RX CPU utilization
              36694 Mbps
          TCP_RR
            With remote checksum offload
              77.80% CPU utilization
              87/153/270 90/95/99% latencies
              1.98735e+06 tps
            Without remote checksum offload
              77.98% CPU utilization
              87/150/287 90/95/99% latencies
              1.98737e+06 tps
      
      SIT/GUE
          TCP_STREAM
            With remote checksum offload
              9.68% TX CPU utilization
              7.36% RX CPU utilization
              35971 Mbps
            Without remote checksum offload
              12.95% TX CPU utilization
              8.04% RX CPU utilization
              36177 Mbps
          TCP_RR
            With remote checksum offload
              79.32% CPU utilization
              94/158/295 90/95/99% latencies
              1.88842e+06 tps
            Without remote checksum offload
              80.23% CPU utilization
              94/149/226 90/95/99% latencies
              1.90338e+06 tps
      
      VXLAN
          TCP_STREAM
              35.03% TX CPU utilization
              20.85% RX CPU utilization
              36230 Mbps
          TCP_RR
              77.36% CPU utilization
              84/146/270 90/95/99% latencies
              2.08063e+06 tps
      
      We can also look at CPU time in csum_partial using perf (with bnx2x
      setup). For GRE with TCP_STREAM I see:
      
          With remote checksum offload
              0.33% TX
              1.81% RX
          Without remote checksum offload
              6.00% TX
              0.51% RX
      
      I suspect the fact that time in csum_partial noticably increases
      with remote checksum offload for RX is due to taking the cache miss on
      the encapsulated header in that function. By similar reasoning, if on
      the TX side the packet were not in cache (say we did a splice from a
      file whose data was never touched by the CPU) the CPU savings for TX
      would probably be more pronounced.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1d76c1d0
    • T
      gue: Receive side of remote checksum offload · a8d31c12
      Tom Herbert 提交于
      Add processing of the remote checksum offload option in both the normal
      path as well as the GRO path. The implements patching the affected
      checksum to derive the offloaded checksum.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a8d31c12
    • T
      gue: TX support for using remote checksum offload option · b17f709a
      Tom Herbert 提交于
      Add if_tunnel flag TUNNEL_ENCAP_FLAG_REMCSUM to configure
      remote checksum offload on an IP tunnel. Add logic in gue_build_header
      to insert remote checksum offload option.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b17f709a
    • T
      gue: Protocol constants for remote checksum offload · c1aa8347
      Tom Herbert 提交于
      Define a private flag for remote checksun offload as well as a length
      for the option.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c1aa8347
    • T
      udp: Changes to udp_offload to support remote checksum offload · e585f236
      Tom Herbert 提交于
      Add a new GSO type, SKB_GSO_TUNNEL_REMCSUM, which indicates remote
      checksum offload being done (in this case inner checksum must not
      be offloaded to the NIC).
      
      Added logic in __skb_udp_tunnel_segment to handle remote checksum
      offload case.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e585f236
    • T
      gue: Add infrastructure for flags and options · 5024c33a
      Tom Herbert 提交于
      Add functions and basic definitions for processing standard flags,
      private flags, and control messages. This includes definitions
      to compute length of optional fields corresponding to a set of flags.
      Flag validation is in validate_gue_flags function. This checks for
      unknown flags, and that length of optional fields is <= length
      in guehdr hlen.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5024c33a
    • T
      udp: Offload outer UDP tunnel csum if available · 4bcb877d
      Tom Herbert 提交于
      In __skb_udp_tunnel_segment if outer UDP checksums are enabled and
      ip_summed is not already CHECKSUM_PARTIAL, set up checksum offload
      if device features allow it.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4bcb877d
    • T
      net: Move fou_build_header into fou.c and refactor · 63487bab
      Tom Herbert 提交于
      Move fou_build_header out of ip_tunnel.c and into fou.c splitting
      it up into fou_build_header, gue_build_header, and fou_build_udp.
      This allows for other users for TX of FOU or GUE. Change ip_tunnel_encap
      to call fou_build_header or gue_build_header based on the tunnel
      encapsulation type. Similarly, added fou_encap_hlen and gue_encap_hlen
      functions which are called by ip_encap_hlen. New net/fou.h has
      prototypes and defines for this.
      
      Added NET_FOU_IP_TUNNELS configuration. When this is set, IP tunnels
      can use FOU/GUE and fou module is also selected.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      63487bab
    • D
      Merge branch 'stmmac-next' · 890b7916
      David S. Miller 提交于
      Giuseppe Cavallaro says:
      
      ====================
      stmmac: review driver Koptions
      
      Recently many Koption options have been added to have new glue logic on several
      platforms.
      
      The main goal behind this work is to guarantee that the driver built
      fine on all the branches where it is present independently of which
      glue logic is selected.
      
      IMHO, it is better to remove all the not necessary Koption(s) that can hide
      build problems when something changes in the driver and especially when
      the DT compatibility allows us to manage all the platform data.
      
      I compiled the driver w/o any issue on net-next Git for:
      
        x86, arm and sh4.
      
      In case of there are build problems on some repos now it will be
      easy to catch them and cherry-pick patches from mainstream.
      
      For sure, do not hesitate to contact me in case of issue.
      
      Also this set removes STMMAC_DEBUG_FS and BUS_MODE_DA. The latter is useless
      and the former can be replaced by DEBUG_FS (always to make safe the build).
      
      V2: patch-set re-based on top of the latest updates for net-next
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      890b7916
    • G
      stmmac: remove BUS_MODE_DA · 98fbebcb
      Giuseppe CAVALLARO 提交于
      This is a very old and often unused option to configure
      a bit in a register inside the DMA. This support should
      not stay under Koption and should be extended for new chips too.
      This will be do later maybe via device-tree parameters.
      Also no performance impact when remove this setting on STi platforms.
      Signed-off-by: NGiuseppe Cavallaro <peppe.cavallaro@st.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      98fbebcb
    • G
      stmmac: remove STMMAC_DEBUG_FS · 50fb4f74
      Giuseppe CAVALLARO 提交于
      the STMMAC_DEBUG_FS Koption is now removed from the
      driver configuration and this support will be built
      by default when DEBUG_FS is present. This can also be
      useful on building driver verification.
      Signed-off-by: NGiuseppe Cavallaro <peppe.cavallaro@st.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      50fb4f74
    • G
      stmmac: remove specific SoC Koption from platform. · c0d54066
      Giuseppe CAVALLARO 提交于
      This patch removes all the Koptions added to build the glue-logic files
      for all different architectures: DWMAC_MESON, DWMAC_SUNXI, DWMAC_STI ...
      Nowadays the stmmac needs to be compiled on several platforms; in some
      case it very convenient to guarantee that its build is always completed
      with success on all the branches where the driver is present.
      Signed-off-by: NGiuseppe Cavallaro <peppe.cavallaro@st.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c0d54066
  2. 05 11月, 2014 17 次提交
  3. 04 11月, 2014 2 次提交
    • E
      net: add rbnode to struct sk_buff · 56b17425
      Eric Dumazet 提交于
      Yaogong replaces TCP out of order receive queue by an RB tree.
      
      As netem already does a private skb->{next/prev/tstamp} union
      with a 'struct rb_node', lets do this in a cleaner way.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Yaogong Wang <wygivan@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      56b17425
    • D
      Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next · 8ce0c825
      David S. Miller 提交于
      Jeff Kirsher says:
      
      ====================
      Intel Wired LAN Driver Updates 2014-11-03
      
      This series contains updates to i40e and i40evf.
      
      Akeem adds a check for i40e so that flow director flush and reinit are
      not done when flow director is not enabled.
      
      Mitch fixes the i40evf driver to properly handle multiple admin queue
      messages, by reinit the msg_size field each time we go through the loop.
      Without this, we may receive truncated messages due to the firmware
      thinking we have insufficient buffer size.  Also fixes the link checking
      logic to only check the carrier state if the interface is actually
      open, which allows link changes to be reported correctly without spamming
      the VFs.  Updates i40e to inset the VSI ID in the QTX_CTL register
      when configuring queues for VMDq VSIs.
      
      Paul adds support for 10G-base-T in i40evf.
      
      Jesse fixes i40e where the call to irq_dynamic_disable() was turning off
      the interrupt completely when trying to set ITR to 0 (for lowest
      moderation).
      
      Shannon removes debugfs dump stats function, since it was not being
      kept up-to-date and was redundant with the ethtool output.  Also, scales
      back the LAN MSIx usage to force queue/vector sharing and leave some
      vectors for Flow Director, VMDq, etc. when there are more cores than
      vectors available to the PF.  Cleans up the error reporting for
      get_lump() resource tracking errors.  Also adds a check for the
      debug module parameter earlier to be able to catch the early configuration
      phase admin queue messages.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8ce0c825