1. 06 4月, 2010 2 次提交
  2. 04 4月, 2010 2 次提交
  3. 03 4月, 2010 1 次提交
  4. 02 4月, 2010 2 次提交
    • F
      net: change illegal_highdma to use dma_mask · 5acbbd42
      FUJITA Tomonori 提交于
      Robert Hancock pointed out two problems about NETIF_F_HIGHDMA:
      
      -Many drivers only set the flag when they detect they can use 64-bit DMA,
      since otherwise they could receive DMA addresses that they can't handle
      (which on platforms without IOMMU/SWIOTLB support is fatal). This means that if
      64-bit support isn't available, even buffers located below 4GB will get copied
      unnecessarily.
      
      -Some drivers set the flag even though they can't actually handle 64-bit DMA,
      which would mean that on platforms without IOMMU/SWIOTLB they would get a DMA
      mapping error if the memory they received happened to be located above 4GB.
      
      http://lkml.org/lkml/2010/3/3/530
      
      We can use the dma_mask if we need bouncing or not here. Then we can
      safely fix drivers that misuse NETIF_F_HIGHDMA.
      Signed-off-by: NFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5acbbd42
    • C
      rps: keep the old behavior on SMP without rps · 152102c7
      Changli Gao 提交于
      keep the old behavior on SMP without rps
      
      RPS introduces a lock operation to per cpu variable input_pkt_queue on
      SMP whenever rps is enabled or not. On SMP without RPS, this lock isn't
      needed at all.
      Signed-off-by: NChangli Gao <xiaosuo@gmail.com>
      ----
      net/core/dev.c | 42 ++++++++++++++++++++++++++++--------------
      1 file changed, 28 insertions(+), 14 deletions(-)
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      152102c7
  5. 29 3月, 2010 1 次提交
  6. 26 3月, 2010 1 次提交
  7. 24 3月, 2010 1 次提交
  8. 22 3月, 2010 3 次提交
  9. 19 3月, 2010 3 次提交
  10. 17 3月, 2010 1 次提交
    • T
      rps: Receive Packet Steering · 0a9627f2
      Tom Herbert 提交于
      This patch implements software receive side packet steering (RPS).  RPS
      distributes the load of received packet processing across multiple CPUs.
      
      Problem statement: Protocol processing done in the NAPI context for received
      packets is serialized per device queue and becomes a bottleneck under high
      packet load.  This substantially limits pps that can be achieved on a single
      queue NIC and provides no scaling with multiple cores.
      
      This solution queues packets early on in the receive path on the backlog queues
      of other CPUs.   This allows protocol processing (e.g. IP and TCP) to be
      performed on packets in parallel.   For each device (or each receive queue in
      a multi-queue device) a mask of CPUs is set to indicate the CPUs that can
      process packets. A CPU is selected on a per packet basis by hashing contents
      of the packet header (e.g. the TCP or UDP 4-tuple) and using the result to index
      into the CPU mask.  The IPI mechanism is used to raise networking receive
      softirqs between CPUs.  This effectively emulates in software what a multi-queue
      NIC can provide, but is generic requiring no device support.
      
      Many devices now provide a hash over the 4-tuple on a per packet basis
      (e.g. the Toeplitz hash).  This patch allow drivers to set the HW reported hash
      in an skb field, and that value in turn is used to index into the RPS maps.
      Using the HW generated hash can avoid cache misses on the packet when
      steering it to a remote CPU.
      
      The CPU mask is set on a per device and per queue basis in the sysfs variable
      /sys/class/net/<device>/queues/rx-<n>/rps_cpus.  This is a set of canonical
      bit maps for receive queues in the device (numbered by <n>).  If a device
      does not support multi-queue, a single variable is used for the device (rx-0).
      
      Generally, we have found this technique increases pps capabilities of a single
      queue device with good CPU utilization.  Optimal settings for the CPU mask
      seem to depend on architectures and cache hierarcy.  Below are some results
      running 500 instances of netperf TCP_RR test with 1 byte req. and resp.
      Results show cumulative transaction rate and system CPU utilization.
      
      e1000e on 8 core Intel
         Without RPS: 108K tps at 33% CPU
         With RPS:    311K tps at 64% CPU
      
      forcedeth on 16 core AMD
         Without RPS: 156K tps at 15% CPU
         With RPS:    404K tps at 49% CPU
      
      bnx2x on 16 core AMD
         Without RPS  567K tps at 61% CPU (4 HW RX queues)
         Without RPS  738K tps at 96% CPU (8 HW RX queues)
         With RPS:    854K tps at 76% CPU (4 HW RX queues)
      
      Caveats:
      - The benefits of this patch are dependent on architecture and cache hierarchy.
      Tuning the masks to get best performance is probably necessary.
      - This patch adds overhead in the path for processing a single packet.  In
      a lightly loaded server this overhead may eliminate the advantages of
      increased parallelism, and possibly cause some relative performance degradation.
      We have found that masks that are cache aware (share same caches with
      the interrupting CPU) mitigate much of this.
      - The RPS masks can be changed dynamically, however whenever the mask is changed
      this introduces the possibility of generating out of order packets.  It's
      probably best not change the masks too frequently.
      Signed-off-by: NTom Herbert <therbert@google.com>
      
       include/linux/netdevice.h |   32 ++++-
       include/linux/skbuff.h    |    3 +
       net/core/dev.c            |  335 +++++++++++++++++++++++++++++++++++++--------
       net/core/net-sysfs.c      |  225 ++++++++++++++++++++++++++++++-
       net/core/skbuff.c         |    2 +
       5 files changed, 538 insertions(+), 59 deletions(-)
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0a9627f2
  11. 27 2月, 2010 2 次提交
    • P
      dev: support deferring device flag change notifications · bd380811
      Patrick McHardy 提交于
      Split dev_change_flags() into two functions: __dev_change_flags() to
      perform the actual changes and __dev_notify_flags() to invoke netdevice
      notifiers. This will be used by rtnl_link to defer netlink notifications
      until the device has been fully configured.
      
      This changes ordering of some operations, in particular:
      
      - netlink notifications are sent after all changes have been performed.
        As a side effect this surpresses one unnecessary netlink message when
        the IFF_UP and other flags are changed simultaneously.
      
      - The NETDEV_UP/NETDEV_DOWN and NETDEV_CHANGE notifiers are invoked
        after all changes have been performed. Their relative is unchanged.
      
      - net_dmaengine_put() is invoked before the NETDEV_DOWN notifier instead
        of afterwards. This should not make any difference since both RX and TX
        are already shut down at this point.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bd380811
    • P
      rtnetlink: handle rtnl_link netlink notifications manually · a2835763
      Patrick McHardy 提交于
      In order to support specifying device flags during device creation,
      we must be able to roll back device registration in case setting the
      flags fails without sending any notifications related to the device
      to userspace.
      
      This patch changes rollback_registered_many() and register_netdevice()
      to manually send netlink notifications for devices not handled by
      rtnl_link and allows to defer notifications for devices handled by
      rtnl_link until setup is complete.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a2835763
  12. 26 2月, 2010 1 次提交
  13. 25 2月, 2010 1 次提交
    • P
      net: Add checking to rcu_dereference() primitives · a898def2
      Paul E. McKenney 提交于
      Update rcu_dereference() primitives to use new lockdep-based
      checking. The rcu_dereference() in __in6_dev_get() may be
      protected either by rcu_read_lock() or RTNL, per Eric Dumazet.
      The rcu_dereference() in __sk_free() is protected by the fact
      that it is never reached if an update could change it.  Check
      for this by using rcu_dereference_check() to verify that the
      struct sock's ->sk_wmem_alloc counter is zero.
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Acked-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: laijs@cn.fujitsu.com
      Cc: dipankar@in.ibm.com
      Cc: mathieu.desnoyers@polymtl.ca
      Cc: josh@joshtriplett.org
      Cc: dvhltc@us.ibm.com
      Cc: niv@us.ibm.com
      Cc: peterz@infradead.org
      Cc: rostedt@goodmis.org
      Cc: Valdis.Kletnieks@vt.edu
      Cc: dhowells@redhat.com
      LKML-Reference: <1266887105-1528-5-git-send-email-paulmck@linux.vnet.ibm.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      a898def2
  14. 24 2月, 2010 1 次提交
    • A
      net: bug fix for vlan + gro issue · c4d49794
      Ajit Khaparde 提交于
      Traffic (tcp) doesnot start on a vlan interface when gro is enabled.
      Even the tcp handshake was not taking place.
      This is because, the eth_type_trans call before the netif_receive_skb
      in napi_gro_finish() resets the skb->dev to napi->dev from the previously
      set vlan netdev interface. This causes the ip_route_input to drop the
      incoming packet considering it as a packet coming from a martian source.
      
      I could repro this on 2.6.32.7 (stable) and 2.6.33-rc7.
      With this fix, the traffic starts and the test runs fine on both vlan
      and non-vlan interfaces.
      
      CC: Herbert Xu <herbert@gondor.apana.org.au>
      CC: Patrick McHardy <kaber@trash.net>
      Signed-off-by: NAjit Khaparde <ajitk@serverengines.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c4d49794
  15. 18 2月, 2010 1 次提交
    • A
      net: bug fix for vlan + gro issue · e76b69cc
      Ajit Khaparde 提交于
      Traffic (tcp) doesnot start on a vlan interface when gro is enabled.
      Even the tcp handshake was not taking place.
      This is because, the eth_type_trans call before the netif_receive_skb
      in napi_gro_finish() resets the skb->dev to napi->dev from the previously
      set vlan netdev interface. This causes the ip_route_input to drop the
      incoming packet considering it as a packet coming from a martian source.
      
      I could repro this on 2.6.32.7 (stable) and 2.6.33-rc7.
      With this fix, the traffic starts and the test runs fine on both vlan
      and non-vlan interfaces.
      
      CC: Herbert Xu <herbert@gondor.apana.org.au>
      CC: Patrick McHardy <kaber@trash.net>
      Signed-off-by: NAjit Khaparde <ajitk@serverengines.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e76b69cc
  16. 13 2月, 2010 1 次提交
  17. 11 2月, 2010 1 次提交
  18. 04 2月, 2010 1 次提交
  19. 26 1月, 2010 1 次提交
  20. 21 1月, 2010 1 次提交
  21. 20 1月, 2010 1 次提交
  22. 07 1月, 2010 2 次提交
    • J
      net: Make it easier to parse /proc/net/dev contents. · 2d13bafe
      Jesper Dangaard Brouer 提交于
      The contents of /proc/net/dev is annoying to parse, because
      it changes whether there is a space after the "ethX:" or not.
      It depends upon the size of the "Receive bytes" counter,
      if the number is below 7 digits, then there is whitespaces
      else if the number is 8 digits or above there is no space
      between the ":" and the number.
      
      This patch changes the output to assure there is always a space
      between the ":" and the number.  Given that all existing userspace
      application already need to handle the whitespaces, I see
      no breakage of existing tools.
      Signed-off-by: NJesper Dangaard Brouer <hawk@comx.dk>
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2d13bafe
    • A
      fix bonding: allow arp_ip_targets on separate vlans to use arp validation · ca8d9ea3
      Andy Gospodarek 提交于
      On Wed, Jan 06, 2010 at 10:10:03PM +0100, Eric Dumazet wrote:
      > Le 06/01/2010 19:38, Eric Dumazet a écrit :
      > >
      > > (net-next-2.6 doesnt work well on my bond/vlan setup, I suspect I need a bisection)
      >
      > David, I had to revert 1f3c8804
      > (bonding: allow arp_ip_targets on separate vlans to use arp validation)
      >
      > Or else, my vlan devices dont work (unfortunatly I dont have much time
      > these days to debug the thing)
      >
      > My config :
      >
      >               +---------+
      > vlan.103 -----+ bond0   +--- eth1 (bnx2)
      >               |         +
      > vlan.825 -----+         +--- eth2 (tg3)
      >               +---------+
      >
      > $ cat /proc/net/bonding/bond0
      > Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
      >
      > Bonding Mode: fault-tolerance (active-backup)
      > Primary Slave: None
      > Currently Active Slave: eth2
      > MII Status: up
      > MII Polling Interval (ms): 100
      > Up Delay (ms): 0
      > Down Delay (ms): 0
      >
      > Slave Interface: eth1  (bnx2)
      > MII Status: down
      > Link Failure Count: 1
      > Permanent HW addr: 00:1e:0b:ec:d3:d2
      >
      > Slave Interface: eth2   (tg3)
      > MII Status: up
      > Link Failure Count: 0
      > Permanent HW addr: 00:1e:0b:92:78:50
      >
      
      This patch fixes up a problem with found with commit
      1f3c8804.  The original change
      overloaded null_or_orig, but doing that prevented any packet handlers
      that were not tied to a specific device (i.e. ptype->dev == NULL) from
      ever receiving any frames.
      
      The null_or_orig variable cannot be overloaded, and must be kept as NULL
      to prevent the frame from being ignored by packet handlers designed to
      accept frames on any interface.
      Signed-off-by: NAndy Gospodarek <andy@greyhouse.net>
      Signed-off-by: NJay Vosburgh <fubar@us.ibm.com>
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ca8d9ea3
  23. 04 1月, 2010 1 次提交
    • A
      bonding: allow arp_ip_targets on separate vlans to use arp validation · 1f3c8804
      Andy Gospodarek 提交于
      This allows a bond device to specify an arp_ip_target as a host that is
      not on the same vlan as the base bond device and still use arp
      validation.  A configuration like this, now works:
      
      BONDING_OPTS="mode=active-backup arp_interval=1000 arp_ip_target=10.0.100.1 arp_validate=3"
      
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
          inet6 ::1/128 scope host
             valid_lft forever preferred_lft forever
      2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
          link/ether 00:13:21:be:33:e9 brd ff:ff:ff:ff:ff:ff
      3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
          link/ether 00:13:21:be:33:e9 brd ff:ff:ff:ff:ff:ff
      8: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue
          link/ether 00:13:21:be:33:e9 brd ff:ff:ff:ff:ff:ff
          inet6 fe80::213:21ff:febe:33e9/64 scope link
             valid_lft forever preferred_lft forever
      9: bond0.100@bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue
          link/ether 00:13:21:be:33:e9 brd ff:ff:ff:ff:ff:ff
          inet 10.0.100.2/24 brd 10.0.100.255 scope global bond0.100
          inet6 fe80::213:21ff:febe:33e9/64 scope link
             valid_lft forever preferred_lft forever
      
      Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
      
      Bonding Mode: fault-tolerance (active-backup)
      Primary Slave: None
      Currently Active Slave: eth1
      MII Status: up
      MII Polling Interval (ms): 0
      Up Delay (ms): 0
      Down Delay (ms): 0
      ARP Polling Interval (ms): 1000
      ARP IP target/s (n.n.n.n form): 10.0.100.1
      
      Slave Interface: eth1
      MII Status: up
      Link Failure Count: 1
      Permanent HW addr: 00:40:05:30:ff:30
      
      Slave Interface: eth0
      MII Status: up
      Link Failure Count: 0
      Permanent HW addr: 00:13:21:be:33:e9
      Signed-off-by: NAndy Gospodarek <andy@greyhouse.net>
      Signed-off-by: NJay Vosburgh <fubar@us.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1f3c8804
  24. 24 12月, 2009 1 次提交
  25. 14 12月, 2009 1 次提交
    • E
      net: Fix userspace RTM_NEWLINK notifications. · d90a909e
      Eric W. Biederman 提交于
      I received some bug reports about userspace programs having problems
      because after RTM_NEWLINK was received they could not immediate access
      files under /proc/sys/net/ because they had not been registered yet.
      
      The original problem was trivially fixed by moving the userspace
      notification from rtnetlink_event() to the end of
      register_netdevice().
      
      When testing that change I discovered I was still getting RTM_NEWLINK
      events before I could access proc and I was also getting RTM_NEWLINK
      events after I was seeing RTM_DELLINK.  Things practically guaranteed
      to confuse userspace.
      
      After a little more investigation these extra notifications proved to
      be from the new notifiers NETDEV_POST_INIT and NETDEV_UNREGISTER_BATCH
      hitting the default case in rtnetlink_event, and triggering
      unnecessary RTM_NEWLINK messages.
      
      rtnetlink_event now explicitly handles NETDEV_UNREGISTER_BATCH and
      NETDEV_POST_INIT to avoid sending the incorrect userspace
      notifications.
      Signed-off-by: NEric W. Biederman <ebiederm@aristanetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d90a909e
  26. 12 12月, 2009 1 次提交
    • K
      net: Handle NETREG_UNINITIALIZED devices correctly · e93737b0
      Krishna Kumar 提交于
      Fix two problems:
      
      1. If unregister_netdevice_many() is called with both registered
         and unregistered devices, rollback_registered_many() bails out
         when it reaches the first unregistered device. The processing
         of the prior registered devices is unfinished, and the
         remaining devices are skipped, and possible registered netdev's
         are leaked/unregistered.
      
      2. System hangs or panics depending on how the devices are passed,
         since when netdev_run_todo() runs, some devices were not fully
         processed.
      
      Tested by passing intermingled unregistered and registered vlan
      devices to unregister_netdevice_many() as follows:
      	1. dev, fake_dev1, fake_dev2: hangs in run_todo
      	   ("unregister_netdevice: waiting for eth1.100 to become
      	    free. Usage count = 1")
      	2. fake_dev1, dev, fake_dev2: failure during de-registration
      	   and next registration, followed by a vlan driver Oops
      	   during subsequent registration.
      
      Confirmed that the patch fixes both cases.
      Signed-off-by: NKrishna Kumar <krkumar2@in.ibm.com>
      Acked-by: NEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e93737b0
  27. 04 12月, 2009 2 次提交
  28. 02 12月, 2009 2 次提交
  29. 30 11月, 2009 1 次提交