1. 18 7月, 2008 6 次提交
    • D
      netdev: Add netdev->select_queue() method. · eae792b7
      David S. Miller 提交于
      Devices or device layers can set this to control the queue selection
      performed by dev_pick_tx().
      
      This function runs under RCU protection, which allows overriding
      functions to have some way of synchronizing with things like dynamic
      ->real_num_tx_queues adjustments.
      
      This makes the spinlock prefetch in dev_queue_xmit() a little bit
      less effective, but that's the price right now for correctness.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      eae792b7
    • D
      netdev: netdev_priv() can now be sane again. · e3c50d5d
      David S. Miller 提交于
      The private area of a netdev is now at a fixed offset once more.
      
      Unfortunately, some assumptions that netdev_priv() == netdev->priv
      crept back into the tree.  In particular this happened in the
      loopback driver.  Make it use netdev->ml_priv.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e3c50d5d
    • D
      6b0fb126
    • D
      net: Use queue aware tests throughout. · fd2ea0a7
      David S. Miller 提交于
      This effectively "flips the switch" by making the core networking
      and multiqueue-aware drivers use the new TX multiqueue structures.
      
      Non-multiqueue drivers need no changes.  The interfaces they use such
      as netif_stop_queue() degenerate into an operation on TX queue zero.
      So everything "just works" for them.
      
      Code that really wants to do "X" to all TX queues now invokes a
      routine that does so, such as netif_tx_wake_all_queues(),
      netif_tx_stop_all_queues(), etc.
      
      pktgen and netpoll required a little bit more surgery than the others.
      
      In particular the pktgen changes, whilst functional, could be largely
      improved.  The initial check in pktgen_xmit() will sometimes check the
      wrong queue, which is mostly harmless.  The thing to do is probably to
      invoke fill_packet() earlier.
      
      The bulk of the netpoll changes is to make the code operate solely on
      the TX queue indicated by by the SKB queue mapping.
      
      Setting of the SKB queue mapping is entirely confined inside of
      net/core/dev.c:dev_pick_tx().  If we end up needing any kind of
      special semantics (drops, for example) it will be implemented here.
      
      Finally, we now have a "real_num_tx_queues" which is where the driver
      indicates how many TX queues are actually active.
      
      With IGB changes from Jeff Kirsher.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fd2ea0a7
    • D
      netdev: Kill NETIF_F_MULTI_QUEUE. · 09e83b5d
      David S. Miller 提交于
      There is no need for a feature bit for something that
      can be tested by simply checking the TX queue count.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      09e83b5d
    • D
      netdev: Allocate multiple queues for TX. · e8a0464c
      David S. Miller 提交于
      alloc_netdev_mq() now allocates an array of netdev_queue
      structures for TX, based upon the queue_count argument.
      
      Furthermore, all accesses to the TX queues are now vectored
      through the netdev_get_tx_queue() and netdev_for_each_tx_queue()
      interfaces.  This makes it easy to grep the tree for all
      things that want to get to a TX queue of a net device.
      
      Problem spots which are not really multiqueue aware yet, and
      only work with one queue, can easily be spotted by grepping
      for all netdev_get_tx_queue() calls that pass in a zero index.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e8a0464c
  2. 15 7月, 2008 3 次提交
  3. 11 7月, 2008 1 次提交
  4. 09 7月, 2008 11 次提交
  5. 06 7月, 2008 1 次提交
  6. 28 6月, 2008 1 次提交
  7. 20 6月, 2008 1 次提交
  8. 18 6月, 2008 4 次提交
    • W
      netdevice: Fix promiscuity and allmulti overflow · dad9b335
      Wang Chen 提交于
      Max of promiscuity and allmulti plus positive @inc can cause overflow.
      Fox example: when allmulti=0xFFFFFFFF, any caller give dev_set_allmulti() a
      positive @inc will cause allmulti be off.
      This is not what we want, though it's rare case.
      The fix is that only negative @inc will cause allmulti or promiscuity be off
      and when any caller makes the counters touch the roof, we return error.
      
      Change of v2:
      Change void function dev_set_promiscuity/allmulti to return int.
      So callers can get the overflow error.
      Caller's fix will be done later.
      
      Change of v3:
      1. Since we return error to caller, we don't need to print KERN_ERROR,
      KERN_WARNING is enough.
      2. In dev_set_promiscuity(), if __dev_set_promiscuity() failed, we
      return at once.
      Signed-off-by: NWang Chen <wangchen@cn.fujitsu.com>
      Acked-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      dad9b335
    • W
      netdevice: change net_device->promiscuity/allmulti to unsigned int · 9d45abe1
      Wang Chen 提交于
      The comments of dev_set_allmulti/promiscuity() is that "While the count in
      the device remains above zero...". So negative count is useless.
      Fix the type of the counter from "int" to "unsigned int".
      Signed-off-by: NWang Chen <wangchen@cn.fujitsu.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d45abe1
    • J
      bonding: Allow setting max_bonds to zero · b8a9787e
      Jay Vosburgh 提交于
      	Permit bonding to function rationally if max_bonds is set to
      zero.  This will load the module, but create no master devices (which can
      be created via sysfs).
      
      	Requires some change to bond_create_sysfs; currently, the
      netdev sysfs directory is determined from the first bonding device created,
      but this is no longer possible.  Instead, an interface from net/core is
      created to create and destroy files in net_class.
      
      	Based on a patch submitted by Phil Oester <kernel@linuxaces.com>.
      Modified by Jay Vosburgh to fix the sysfs issue mentioned above and to
      update the documentation.
      Signed-off-by: NPhil Oester <kernel@linuxace.com>
      Signed-off-by: NJay Vosburgh <fubar@us.ibm.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      b8a9787e
    • O
      net/core: add NETDEV_BONDING_FAILOVER event · c1da4ac7
      Or Gerlitz 提交于
      Add NETDEV_BONDING_FAILOVER event to be used in a successive patch
      by bonding to announce fail-over for the active-backup mode through the
      netdev events notifier chain mechanism. Such an event can be of use for the
      RDMA CM (communication manager) to let native RDMA ULPs (eg NFS-RDMA, iSER)
      always be aligned with the IP stack, in the sense that they use the same
      ports/links as the stack does. More usages can be done to allow monitoring
      tools based on netlink events being aware to bonding fail-over.
      Signed-off-by: NOr Gerlitz <ogerlitz@voltaire.com>
      Signed-off-by: NJay Vosburgh <fubar@us.ibm.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c1da4ac7
  9. 23 5月, 2008 1 次提交
  10. 21 5月, 2008 1 次提交
  11. 13 5月, 2008 2 次提交
  12. 12 5月, 2008 1 次提交
    • D
      syncppp: Fix crashes. · 4951704b
      David S. Miller 提交于
      The syncppp layer wants a mid-level netdev private pointer.
      
      It was using netdev->priv but that only worked by accident,
      and thus this scheme was broken when the device private
      allocation strategy changed.
      
      Add a proper mid-layer private pointer for uses like this,
      update syncppp and all users, and remove the HDLC_PPP broken
      tag from drivers/net/wan/Kconfig
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4951704b
  13. 16 4月, 2008 1 次提交
  14. 04 4月, 2008 1 次提交
  15. 31 3月, 2008 1 次提交
  16. 29 3月, 2008 2 次提交
  17. 28 3月, 2008 1 次提交
    • D
      [NET]: Use local_irq_{save,restore}() in napi_complete(). · 50fd4407
      David S. Miller 提交于
      Based upon a lockdep report.
      
      Since ->poll() can be invoked from netpoll with interrupts
      disabled, we must not unconditionally enable interrupts
      in napi_complete().
      
      Instead we must use local_irq_{save,restore}().
      
      Noticed by Peter Zijlstra:
      
      <irqs disabled>
      
        netpoll_poll()
          poll_napi()
            spin_trylock(&napi->poll_lock)
            poll_one_napi()
              napi->poll() := sky2_poll()
                napi_complete()
                  local_irq_disable()
                  local_irq_enable() <--- *BUG*
      
        <irq>
          irq_exit()
            do_softirq()
              net_rx_action()
                spin_lock(&napi->poll_lock) <--- Deadlock!
      
      Because we still hold the lock....
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      50fd4407
  18. 26 3月, 2008 1 次提交