1. 18 Jul, 2008 11 commits
    • David S. Miller's avatar
      net: Implement simple sw TX hashing. · 8f0f2223
      David S. Miller authored
      It just xor hashes over IPv4/IPv6 addresses and ports of transport.
      
      The only assumption it makes is that skb_network_header() is set
      correctly.
      
      With bug fixes from Eric Dumazet.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8f0f2223
    • David S. Miller's avatar
      mac80211: Reimplement WME using ->select_queue(). · 51cb6db0
      David S. Miller authored
      The only behavior change is that we do not drop packets under any
      circumstances.  If that is absolutely needed, we could easily add it
      back.
      
      With cleanups and help from Johannes Berg.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      51cb6db0
    • David S. Miller's avatar
      netdev: Add netdev->select_queue() method. · eae792b7
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      eae792b7
    • David S. Miller's avatar
      netdev: netdev_priv() can now be sane again. · e3c50d5d
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      e3c50d5d
    • David S. Miller's avatar
      6b0fb126
    • David S. Miller's avatar
      net: Use queue aware tests throughout. · fd2ea0a7
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      fd2ea0a7
    • David S. Miller's avatar
      mac80211: Temporarily mark QoS support BROKEN. · 24344d26
      David S. Miller authored
      We will undo this after a few changsets.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      24344d26
    • David S. Miller's avatar
      pkt_sched: Remove RR scheduler. · 1d8ae3fd
      David S. Miller authored
      This actually fixes a bug added by the RR scheduler changes.  The
      ->bands and ->prio2band parameters were being set outside of the
      sch_tree_lock() and thus could result in strange behavior and
      inconsistencies.
      
      It might be possible, in the new design (where there will be one qdisc
      per device TX queue) to allow similar functionality via a TX hash
      algorithm for RR but I really see no reason to export this aspect of
      how these multiqueue cards actually implement the scheduling of the
      the individual DMA TX rings and the single physical MAC/PHY port.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1d8ae3fd
    • David S. Miller's avatar
      netdev: Kill NETIF_F_MULTI_QUEUE. · 09e83b5d
      David S. Miller authored
      There is no need for a feature bit for something that
      can be tested by simply checking the TX queue count.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      09e83b5d
    • David S. Miller's avatar
      netdev: Allocate multiple queues for TX. · e8a0464c
      David S. Miller authored
      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: default avatarDavid S. Miller <davem@davemloft.net>
      e8a0464c
    • David S. Miller's avatar
  2. 17 Jul, 2008 28 commits
  3. 16 Jul, 2008 1 commit