1. 20 9月, 2014 40 次提交
    • D
      Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next · 6c62f606
      David S. Miller 提交于
      Jeff Kirsher says:
      
      ====================
      Intel Wired LAN Driver Updates 2014-09-18
      
      This series contains updates to ixgbe and ixgbevf.
      
      Ethan Zhao cleans up ixgbe and ixgbevf by removing bd_number from the
      adapter struct because it is not longer useful.
      
      Mark fixes ixgbe where if a hardware transmit timestamp is requested,
      an uninitialized workqueue entry may be scheduled.  Added a check for
      a PTP clock to avoid that.
      
      Jacob provides a number of cleanups for ixgbe.  Since we may call
      ixgbe_acquire_msix_vectors() prior to registering our netdevice, we
      should not use the netdevice specific printk and use e_dev_warn()
      instead.  Similar to how ixgbevf handles acquiring MSI-X vectors, we
      can return an error code instead of relying on the flag being set.
      This makes it more clear that we have failed to setup MSI-X mode and
      will make it easier to consolidate MSI-X related code into a single
      function.  In the case of disabling DCB, it is not an error since we
      still can function, we just have to let the user know.  So use
      e_dev_warn() instead of e_err().  Added warnings for other features
      that are disabled when we are without MSI-X support.  Cleanup flags
      that are no longer used or needed.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6c62f606
    • D
      Merge branch 'mlx4-next' · 58310b3f
      David S. Miller 提交于
      Or Gerlitz says:
      
      ====================
      mlx4: CQE/EQE stride support
      
      This series from Ido Shamay is intended for archs having
      cache line larger then 64 bytes.
      
      Since our CQE/EQEs are generally 64B in those systems, HW will write
      twice to the same cache line consecutively, causing pipe locks due to
      he hazard prevention mechanism. For elements in a cyclic buffer, writes
      are consecutive, so entries smaller than a cache line should be
      avoided, especially if they are written at a high rate.
      
      Reduce consecutive writes to same cache line in CQs/EQs, by allowing the
      driver to increase the distance between entries so that each will reside
      in a different cache line.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      58310b3f
    • I
      net/mlx4_en: Add mlx4_en_get_cqe helper · b1b6b4da
      Ido Shamay 提交于
      This function derives the base address of the CQE from the CQE size,
      and calculates the real CQE context segment in it from the factor
      (this is like before). Before this change the code used the factor to
      calculate the base address of the CQE as well.
      
      The factor indicates in which segment of the cqe stride the cqe information
      is located. For 32-byte strides, the segment is 0, and for 64 byte strides,
      the segment is 1 (bytes 32..63). Using the factor was ok as long as we had
      only 32 and 64 byte strides. However, with larger strides, the factor is zero,
      and so cannot be used to calculate the base of the CQE.
      
      The helper uses the same method of CQE buffer pulling made by all other
      components that reads the CQE buffer (mlx4_ib driver and libmlx4).
      Signed-off-by: NIdo Shamay <idos@mellanox.com>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b1b6b4da
    • I
      net/mlx4_core: Cache line EQE size support · 43c816c6
      Ido Shamay 提交于
      Enable mlx4 interrupt handler to work with EQE stride feature,
      The feature may be enabled when cache line is bigger than 64B.
      The EQE size will then be the cache line size, and the context
      segment resides in [0-31] offset.
      Signed-off-by: NIdo Shamay <idos@mellanox.com>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      43c816c6
    • I
      net/mlx4_core: Enable CQE/EQE stride support · 77507aa2
      Ido Shamay 提交于
      This feature is intended for archs having cache line larger then 64B.
      
      Since our CQE/EQEs are generally 64B in those systems, HW will write
      twice to the same cache line consecutively, causing pipe locks due to
      he hazard prevention mechanism. For elements in a cyclic buffer, writes
      are consecutive, so entries smaller than a cache line should be
      avoided, especially if they are written at a high rate.
      
      Reduce consecutive writes to same cache line in CQs/EQs, by allowing the
      driver to increase the distance between entries so that each will reside
      in a different cache line. Until the introduction of this feature, there
      were two types of CQE/EQE:
      
      1. 32B stride and context in the [0-31] segment
      2. 64B stride and context in the [32-63] segment
      
      This feature introduces two additional types:
      
      3. 128B stride and context in the [0-31] segment (128B cache line)
      4. 256B stride and context in the [0-31] segment (256B cache line)
      
      Modify the mlx4_core driver to query the device for the CQE/EQE cache
      line stride capability and to enable that capability when the host
      cache line size is larger than 64 bytes (supported cache lines are
      128B and 256B).
      
      The mlx4 IB driver and libmlx4 need not be aware of this change. The PF
      context behaviour is changed to require this change in VF drivers
      running on such archs.
      Signed-off-by: NIdo Shamay <idos@mellanox.com>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      77507aa2
    • S
      net: fix sparse warnings in SNMP_UPD_PO_STATS(_BH) · 54003f11
      Sabrina Dubroca 提交于
      ptr used to be a non __percpu pointer (result of a this_cpu_ptr
      assignment, 7d720c3e ("percpu: add __percpu sparse annotations to
      net")). Since d25398df ("net: avoid reloads in SNMP_UPD_PO_STATS"),
      that's no longer the case, SNMP_UPD_PO_STATS uses this_cpu_add and ptr
      is now __percpu.
      
      Silence sparse warnings by preserving the original type and
      annotation, and remove the out-of-date comment.
      
      warning: incorrect type in initializer (different address spaces)
         expected unsigned long long *ptr
         got unsigned long long [noderef] <asn:3>*<noident>
      warning: incorrect type in initializer (different address spaces)
         expected void const [noderef] <asn:3>*__vpp_verify
         got unsigned long long *<noident>
      warning: incorrect type in initializer (different address spaces)
         expected void const [noderef] <asn:3>*__vpp_verify
         got unsigned long long *<noident>
      Signed-off-by: NSabrina Dubroca <sd@queasysnail.net>
      Acked-by: NHannes Frederic Sowa <hannes@stressinduktion.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      54003f11
    • D
      Merge branch 'fou-next' · fb5690d2
      David S. Miller 提交于
      Tom Herbert says:
      
      ====================
      net: foo-over-udp (fou)
      
      This patch series implements foo-over-udp. The idea is that we can
      encapsulate different IP protocols in UDP packets. The rationale for
      this is that networking devices such as NICs and switches are usually
      implemented with UDP (and TCP) specific mechanims for processing. For
      instance, many switches and routers will implement a 5-tuple hash
      for UDP packets to perform Equal Cost Multipath Routing (ECMP) or
      RSS (on NICs). Many NICs also only provide rudimentary checksum
      offload (basic TCP and UDP packet), with foo-over-udp we may be
      able to leverage these NICs to offload checksums of tunneled packets
      (using checksum unnecessary conversion and eventually remote checksum
      offload)
      
      An example encapsulation of IPIP over FOU is diagrammed below. As
      illustrated, the packet overhead for FOU is the 8 byte UDP header.
      
      +------------------+
      |    IPv4 hdr      |
      +------------------+
      |     UDP hdr      |
      +------------------+
      |    IPv4 hdr      |
      +------------------+
      |     TCP hdr      |
      +------------------+
      |   TCP payload    |
      +------------------+
      
      Conceptually, FOU should be able to encapsulate any IP protocol.
      The FOU header (UDP hdr.) is essentially an inserted header between the
      IP header and transport, so in the case of TCP or UDP encapsulation
      the pseudo header would be based on the outer IP header and its length
      field must not include the UDP header.
      
      * Receive
      
      In this patch set the RX path for FOU is implemented in a new fou
      module. To enable FOU for a particular protocol, a UDP-FOU socket is
      opened to the port to receive FOU packets. The socket is mapped to the
      IP protocol for the packets. The XFRM mechanism used to receive
      encapsulated packets (udp_encap_rcv) for the port. Upon reception, the
      UDP is removed and packet is reinjected in the stack for the
      corresponding protocol associated with the socket (return -protocol
      from udp_encap_rcv function).
      
      GRO is provided with the appropriate fou_gro_receive and
      fou_gro_complete. These routines need to know the encapsulation
      protocol so we save that in udp_offloads structure with the port
      and pass it in the napi_gro_cb structure.
      
      * TX
      
      This patch series implements FOU transmit encapsulation for IPIP, GRE, and
      SIT. This done by some common infrastructure in ip_tunnel including an
      ip_tunnel_encap to perform FOU encapsulation and common configuration
      to enable FOU on IP tunnels. FOU is configured on existing tunnels and
      does not create any new interfaces. The transmit and receive paths are
      independent, so use of FOU may be assymetric between tunnel endpoints.
      
      * Configuration
      
      The fou module using netlink to configure FOU receive ports. The ip
      command can be augmented with a fou subcommand to support this. e.g. to
      configure FOU for IPIP on port 5555:
      
        ip fou add port 5555 ipproto 4
      
      GRE, IPIP, and SIT have been modified with netlink commands to
      configure use of FOU on transmit. The "ip link" command will be
      augmented with an encap subcommand (for supporting various forms of
      secondary encapsulation). For instance, to configure an ipip tunnel
      with FOU on port 5555:
      
        ip link add name tun1 type ipip \
          remote 192.168.1.1 local 192.168.1.2 ttl 225 \
          encap fou encap-sport auto encap-dport 5555
      
      * Notes
        - This patch set does not implement GSO for FOU. The UDP encapsulation
          code assumes TEB, so that will need to be reimplemented.
        - When a packet is received through FOU, the UDP header is not
          actually removed for the skbuf, pointers to transport header
          and length in the IP header are updated (like in ESP/UDP RX). A
          side effect is the IP header will now appear to have an incorrect
          checksum by an external observer (e.g. tcpdump), it will be off
          by sizeof UDP header. If necessary we could adjust the checksum
          to compensate.
        - Performance results are below. My expectation is that FOU should
          entail little overhead (clearly there is some work to do :-) ).
          Optimizing UDP socket lookup for encapsulation ports should help
          significantly.
        - I really don't expect/want devices to have special support for any
          of this. Generic checksum offload mechanisms (NETIF_HW_CSUM
          and use of CHECKSUM_COMPLETE) should be sufficient. RSS and flow
          steering is provided by commonly implemented UDP hashing. GRO/GSO
          seem fairly comparable with LRO/TSO already.
      
      * Performance
      
      Ran netperf TCP_RR and TCP_STREAM tests across various configurations.
      This was performed on bnx2x and I disabled TSO/GSO on sender to get
      fair comparison for FOU versus non-FOU. CPU utilization is reported
      for receive in TCP_STREAM.
      
        GRE
          IPv4, FOU, UDP checksum enabled
            TCP_STREAM
              24.85% CPU utilization
              9310.6 Mbps
            TCP_RR
              94.2% CPU utilization
              155/249/460 90/95/99% latencies
              1.17018e+06 tps
          IPv4, FOU, UDP checksum disabled
            TCP_STREAM
              31.04% CPU utilization
              9302.22 Mbps
            TCP_RR
              94.13% CPU utilization
              154/239/419 90/95/99% latencies
              1.17555e+06 tps
          IPv4, no FOU
            TCP_STREAM
              23.13% CPU utilization
              9354.58 Mbps
            TCP_RR
              90.24% CPU utilization
              156/228/360 90/95/99% latencies
              1.18169e+06 tps
      
        IPIP
          FOU, UDP checksum enabled
            TCP_STREAM
              24.13% CPU utilization
              9328 Mbps
            TCP_RR
              94.23
              149/237/429 90/95/99% latencies
              1.19553e+06 tps
          FOU, UDP checksum disabled
            TCP_STREAM
              29.13% CPU utilization
              9370.25 Mbps
            TCP_RR
              94.13% CPU utilization
              149/232/398 90/95/99% latencies
              1.19225e+06 tps
          No FOU
            TCP_STREAM
              10.43% CPU utilization
              5302.03 Mbps
            TCP_RR
              51.53% CPU utilization
              215/324/475 90/95/99% latencies
              864998 tps
      
        SIT
          FOU, UDP checksum enabled
            TCP_STREAM
              30.38% CPU utilization
              9176.76 Mbps
            TCP_RR
              96.9% CPU utilization
              170/281/581 90/95/99% latencies
              1.03372e+06 tps
          FOU, UDP checksum disabled
            TCP_STREAM
              39.6% CPU utilization
              9176.57 Mbps
            TCP_RR
              97.14% CPU utilization
              167/272/548 90/95/99% latencies
              1.03203e+06 tps
          No FOU
            TCP_STREAM
              11.2% CPU utilization
              4636.05 Mbps
            TCP_RR
              59.51% CPU utilization
              232/346/489 90/95/99% latencies
              813199 tps
      
      v2:
        - Removed encap IP tunnel ioctls, configuration is done by netlink
          only.
        - Don't export fou_create and fou_destroy, they are currently
          intended to be called within fou module only.
        - Filled on tunnel netlink structures and functions for new values.
      
      v3:
        - Fixed change logs for some of the patches.
        - Remove inline from fou_gro_receive and fou_gro_complete, let
          compiler decide on these.
      
      v4:
        - Don't need to cast void in fou_from_sock
        - Removed incorrest htons for port in fou_destroy
        - Some minor cleanup for readability
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fb5690d2
    • T
      gre: Setup and TX path for gre/UDP foo-over-udp encapsulation · 4565e991
      Tom Herbert 提交于
      Added netlink attrs to configure FOU encapsulation for GRE, netlink
      handling of these flags, and properly adjust MTU for encapsulation.
      ip_tunnel_encap is called from ip_tunnel_xmit to actually perform FOU
      encapsulation.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4565e991
    • T
      ipip: Setup and TX path for ipip/UDP foo-over-udp encapsulation · 473ab820
      Tom Herbert 提交于
      Add netlink handling for IP tunnel encapsulation parameters and
      and adjustment of MTU for encapsulation.  ip_tunnel_encap is called
      from ip_tunnel_xmit to actually perform FOU encapsulation.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      473ab820
    • T
      sit: Setup and TX path for sit/UDP foo-over-udp encapsulation · 14909664
      Tom Herbert 提交于
      Added netlink handling of IP tunnel encapulation paramters, properly
      adjust MTU for encapsulation. Added ip_tunnel_encap call to
      ipip6_tunnel_xmit to actually perform FOU encapsulation.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      14909664
    • T
      net: Changes to ip_tunnel to support foo-over-udp encapsulation · 56328486
      Tom Herbert 提交于
      This patch changes IP tunnel to support (secondary) encapsulation,
      Foo-over-UDP. Changes include:
      
      1) Adding tun_hlen as the tunnel header length, encap_hlen as the
         encapsulation header length, and hlen becomes the grand total
         of these.
      2) Added common netlink define to support FOU encapsulation.
      3) Routines to perform FOU encapsulation.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      56328486
    • T
      fou: Add GRO support · afe93325
      Tom Herbert 提交于
      Implement fou_gro_receive and fou_gro_complete, and populate these
      in the correponsing udp_offloads for the socket. Added ipproto to
      udp_offloads and pass this from UDP to the fou GRO routine in proto
      field of napi_gro_cb structure.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      afe93325
    • T
      fou: Support for foo-over-udp RX path · 23461551
      Tom Herbert 提交于
      This patch provides a receive path for foo-over-udp. This allows
      direct encapsulation of IP protocols over UDP. The bound destination
      port is used to map to an IP protocol, and the XFRM framework
      (udp_encap_rcv) is used to receive encapsulated packets. Upon
      reception, the encapsulation header is logically removed (pointer
      to transport header is advanced) and the packet is reinjected into
      the receive path with the IP protocol indicated by the mapping.
      
      Netlink is used to configure FOU ports. The configuration information
      includes the port number to bind to and the IP protocol corresponding
      to that port.
      
      This should support GRE/UDP
      (http://tools.ietf.org/html/draft-yong-tsvwg-gre-in-udp-encap-02),
      as will as the other IP tunneling protocols (IPIP, SIT).
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      23461551
    • T
      net: Export inet_offloads and inet6_offloads · ce3e0286
      Tom Herbert 提交于
      Want to be able to use these in foo-over-udp offloads, etc.
      Signed-off-by: NTom Herbert <therbert@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ce3e0286
    • J
      net: sched: cls_u32: rcu can not be last node · 4e2840ee
      John Fastabend 提交于
      tc_u32_sel 'sel' in tc_u_knode expects to be the last element in the
      structure and pads the structure with tc_u32_key fields for each key.
      
       kzalloc(sizeof(*n) + s->nkeys*sizeof(struct tc_u32_key), GFP_KERNEL)
      
      CC: Eric Dumazet <edumazet@google.com>
      Signed-off-by: NJohn Fastabend <john.r.fastabend@intel.com>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4e2840ee
    • E
      net: sched: use __skb_queue_head_init() where applicable · ab34f648
      Eric Dumazet 提交于
      pfifo_fast and htb use skb lists, without needing their spinlocks.
      (They instead use the standard qdisc lock)
      
      We can use __skb_queue_head_init() instead of skb_queue_head_init()
      to be consistent.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ab34f648
    • D
      Merge branch 'bnx2x-next' · 0ce77802
      David S. Miller 提交于
      Yuval Mintz says:
      
      ====================
      bnx2x: Support new Multi-function modes
      
      This patch series adds support for 2 new Multi-function modes -
      Unified Fabric Port [UFP] as well as nic partitioning 1.5 [NPAR1.5].
      
      With the addition of the new multi-function modes, the series also
      revises some of the storage-related multi-function macros.
      
      [Do notice this series has several small issues with checkpatch]
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0ce77802
    • Y
      bnx2x: Add a fallback multi-function mode NPAR1.5 · 83bad206
      Yuval Mintz 提交于
      When using new Multi-function modes it's possible that due to incompatible
      configuration management FW will fallback into an existing mode.
      
      Notice that at the moment this fallback is exactly the same as the already
      existing switch-independent multi-function mode, but we still use existing
      infrastructure to hold this information [in case some small differences will
      arise in the future].
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NDmitry Kravkov <Dmitry.Kravkov@qlogic.com>
      Signed-off-by: NAriel Elior <Ariel.Elior@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      83bad206
    • Y
      bnx2x: New multi-function mode: UFP · 7609647e
      Yuval Mintz 提交于
      Add support for a new multi-function mode based on the Unified Fabric Port
      system specifications.
      Support includes configuration of:
        1. Outer vlan tags.
        2. Bandwidth settings.
        3. Virtual link enable/disable.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NDmitry Kravkov <Dmitry.Kravkov@qlogic.com>
      Signed-off-by: NAriel Elior <Ariel.Elior@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7609647e
    • D
      bnx2x: Changes with storage & MAC macros · 2e98ffc2
      Dmitry Kravkov 提交于
      Rearrange macros to query for storage-only modes in different MF environment.
      Improves the readibility and maintainability of the code. E.g.:
      	-	if (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))
      	+	if (IS_MF_STORAGE_ONLY(bp))
      
      In addition, this removes the need for bnx2x_is_valid_ether_addr().
      Signed-off-by: NDmitry Kravkov <Dmitry.Kravkov@qlogic.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NAriel Elior <Ariel.Elior@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2e98ffc2
    • D
      Merge branch 'fec-next' · 77f4f622
      David S. Miller 提交于
      Florian Fainelli says:
      
      ====================
      net: phy: Broadcom BCM7xxx PHY workaround update
      
      This patch sets the change to of_phy_connect() that you have seen before,
      this time with the full context of why it is useful and applicable here.
      
      Due to some design decision, the internal PHY on Broadcom BCM7xxx chips
      is not entirely self contained and does not report its internal revision
      through MII_PHYSID2, that is left to external PHY designs.
      
      This forces us to get the PHY revision from the GENET and SF2 switch drivers
      because those two peripherals integrate such a PHY and do contain the PHY
      revision in their registers.
      
      The approach taken here is hopefully easy to extend to similar needs for
      other chips/ as well.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      77f4f622
    • F
      net: phy: bcm7xxx: utilize PHY revision in config_init · d8ebfed3
      Florian Fainelli 提交于
      Now that the GENET and SF2 drivers have been updated to communicate us
      what is the revision of the BCM7xxx integrated PHY, utilize that
      information in the config_init() callback to call into the appropriate
      workaround function based on our revision.
      
      While at it, we also print the revision and patch level to help debug
      new chips.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d8ebfed3
    • F
      net: dsa: bcm_sf2: communicate integrated PHY revision to PHY driver · aa9aef77
      Florian Fainelli 提交于
      The integrated BCM7xxx PHY contains no useful revision information
      in its MII_PHYSID2 bits 3:0, that information is instead contained in
      the SWITCH_REG_PHY_REVISION register.
      
      Read this register, store its value, and return it by implementing the
      dsa_switch::get_phy_flags() callback accordingly. The register layout is
      already matching what the BCM7xxx PHY driver is expecting to find.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      aa9aef77
    • F
      net: dsa: allow switch drivers to specify phy_device::dev_flags · 6819563e
      Florian Fainelli 提交于
      Some switch drivers (e.g: bcm_sf2) may have to communicate specific
      workarounds or flags towards the PHY device driver. Allow switches
      driver to be delegated that task by introducing a get_phy_flags()
      callback which will do just that.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6819563e
    • F
      net: bcmgenet: communicate integrated PHY revision to PHY driver · 487320c5
      Florian Fainelli 提交于
      The integrated BCM7xxx PHY contains no useful revision information in
      its MII_PHYSID2 bits 3:0, that information is instead contained in the
      GENET hardware block.
      
      We already read the GENET 32-bit revision register, so store the
      integrated PHY revision in the driver private structure, and then
      communicate this revision value to the PHY driver by overriding the
      phy_flags value.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      487320c5
    • F
      net: bcmgenet: remove PHY_BRCM_100MBPS_WAR · 80780a54
      Florian Fainelli 提交于
      Now that we have removed the need for the PHY_BRCM_100MBPS_WAR flag, we
      can remove it from the GENET driver and the broadcom shared header file.
      The PHY driver checks the PHY supported bitmask instead.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      80780a54
    • F
      net: phy: bcm7xxx: do not use PHY_BRCM_100MBPS_WAR · e18556ee
      Florian Fainelli 提交于
      There is no need for the PHY driver to check PHY_BRCM_100MBPS_WAR since
      that is redundant with checking the PHY device supported features. Get
      rid of that workaround flag.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e18556ee
    • F
      net: phy: broadcom: add helper for PHY revision and patch level · bb7d9349
      Florian Fainelli 提交于
      The Broadcom BCM7xxx internal PHYs do not contain any useful revision
      information in the low 4-bits of their MII_PHYSID2 (MII register 3)
      which could allow us to properly identify them.
      
      As a result, we need the actual hardware block integrating these PHYs:
      GENET or the SF2 switch to tell us what revision they are built with. To
      assist with that, add two helper macros for fetching the the PHY
      revision and patch level from the struct phy_device::dev_flags.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bb7d9349
    • F
      of: mdio: honor flags passed to of_phy_connect · 2f637151
      Florian Fainelli 提交于
      Commit f9a8f83b ("net: phy: remove flags argument from phy_{attach,
      connect, connect_direct}") removed the flags argument to the PHY library
      calls to: phy_{attach,connect,connect_direct}.
      
      Most Device Tree aware drivers call of_phy_connect() with the flag
      argument set to 0, but some of them might want to set a different value
      there in order for the PHY driver to key a specific behavior based on
      the phy_device::phy_flags value.
      
      Allow such drivers to set custom phy_flags as part of the
      of_phy_connect() call since of_phy_connect() does start the PHY state
      machine, it will call into the PHY driver config_init() callback which
      is usually where a specific phy_flags value is important.
      
      Fixes: f9a8f83b ("net: phy: remove flags argument from phy_{attach, connect, connect_direct}")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2f637151
    • E
      net: add alloc_skb_with_frags() helper · 2e4e4410
      Eric Dumazet 提交于
      Extract from sock_alloc_send_pskb() code building skb with frags,
      so that we can reuse this in other contexts.
      
      Intent is to use it from tcp_send_rcvq(), tcp_collapse(), ...
      
      We also want to replace some skb_linearize() calls to a more reliable
      strategy in pathological cases where we need to reduce number of frags.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2e4e4410
    • E
      tcp: do not fake tcp headers in tcp_send_rcvq() · cb93471a
      Eric Dumazet 提交于
      Now we no longer rely on having tcp headers for skbs in receive queue,
      tcp repair do not need to build fake ones.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Acked-by: NNeal Cardwell <ncardwell@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cb93471a
    • D
      Merge branch 'udp-tunnel-common' · 3ff64259
      David S. Miller 提交于
      Andy Zhou says:
      
      ====================
      Refactor vxlan and l2tp to use new common UDP tunnel APIs
      
      This patch series add a few more UDP tunnel APIs and refactoring current
      UDP tunnel based protocols, vxlan and l2tp to make use of the new APIs.
      
      The added APIs are setup_udp_tunnel_sock(), udp_tunnel_xmit_skb() and
      udp_tunnel_sock_release(). Those implementation logics already exist in
      current vxlan and l2tp implementation. Move them to common APIs to reduce
      code duplications.
      
      Also split udp_tunnel.c into net/ipv4/udp_tunnel.c and
      net/ipv6/ip6_udp_tunnel.c to maintain proper IP protocol separation.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3ff64259
    • A
      l2tp: Refactor l2tp core driver to make use of the common UDP tunnel functions · c8fffcea
      Andy Zhou 提交于
      Simplify l2tp implementation using common UDP tunnel APIs.
      Signed-off-by: NAndy Zhou <azhou@nicira.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c8fffcea
    • A
      vxlan: Refactor vxlan driver to make use of the common UDP tunnel functions. · acbf74a7
      Andy Zhou 提交于
      Simplify vxlan implementation using common UDP tunnel APIs.
      Signed-off-by: NAndy Zhou <azhou@nicira.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      acbf74a7
    • A
      udp-tunnel: Add a few more UDP tunnel APIs · 6a93cc90
      Andy Zhou 提交于
      Added a few more UDP tunnel APIs that can be shared by UDP based
      tunnel protocol implementation. The main ones are highlighted below.
      
      setup_udp_tunnel_sock() configures UDP listener socket for
      receiving UDP encapsulated packets.
      
      udp_tunnel_xmit_skb() and upd_tunnel6_xmit_skb() transmit skb
      using UDP encapsulation.
      
      udp_tunnel_sock_release() closes the UDP tunnel listener socket.
      Signed-off-by: NAndy Zhou <azhou@nicira.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6a93cc90
    • A
      udp_tunnel: Seperate ipv6 functions into its own file. · fd384412
      Andy Zhou 提交于
      Add ip6_udp_tunnel.c for ipv6 UDP tunnel functions to avoid ifdefs
      in udp_tunnel.c
      Signed-off-by: NAndy Zhou <azhou@nicira.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fd384412
    • D
      Merge branch 'fec-next' · 79ba2b4c
      David S. Miller 提交于
      Frank Li says:
      
      ====================
      net: fec: add interrupt coalescence
      
      improve error handle when parse queue number.
      add interrupt coalescence feature.
      
      Change from v2 to v3
       - add error check in fec_enet_set_coalesce
       - fix a run time warning to get clock rate in interrupt
       - fix commit message use TKT number
      
      Change from v1 to v2
       - fix indention
       - use errata number instead of TKT
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      79ba2b4c
    • F
      net: fec: Workaround for imx6sx enet tx hang when enable three queues · 37d6017b
      Fugang Duan 提交于
      When enable three queues on imx6sx enet, and then do tx performance
      test with iperf tool, after some time running, tx hang.
      
      Found that:
      	If uDMA is running, software set TDAR may cause tx hang.
      	If uDMA is in idle, software set TDAR don't cause tx hang.
      
      There is a TDAR race condition for mutliQ when the software sets TDAR
      and the UDMA clears TDAR simultaneously or in a small window (2-4 cycles).
      This will cause the udma_tx and udma_tx_arbiter state machines to hang.
      The issue exist at i.MX6SX enet IP.
      
      So, the Workaround is checking TDAR status four time, if TDAR cleared by
      hardware and then write TDAR, otherwise don't set TDAR.
      
      The patch is only one Workaround for the issue ERR007885.
      Signed-off-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NFrank Li <Frank.Li@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      37d6017b
    • F
      net:fec: increase DMA queue number · 73e72289
      Fugang Duan 提交于
      when enable interrupt coalesce, 8 BD is not enough.
      Signed-off-by: NFrank Li <Frank.Li@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      73e72289
    • F
      net: fec: add interrupt coalescence feature support · d851b47b
      Fugang Duan 提交于
      i.MX6 SX support interrupt coalescence feature
      By default, init the interrupt coalescing frame count threshold and
      timer threshold.
      
      Supply the ethtool interfaces as below for user tuning to improve
      enet performance:
      	rx_max_coalesced_frames
      	rx_coalesce_usecs
      	tx_max_coalesced_frames
      	tx_coalesce_usecs
      Signed-off-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NFrank Li <Frank.Li@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d851b47b