1. 25 6月, 2005 1 次提交
    • D
      [TG3]: Eliminate all hw IRQ handler spinlocks. · f47c11ee
      David S. Miller 提交于
      Move all driver spinlocks to be taken at sw IRQ
      context only.
      
      This fixes the skb_copy() we were doing with hw
      IRQs disabled (which is illegal and triggers a
      BUG() with HIGHMEM enabled).  It also simplifies
      the locking all over the driver tremendously.
      
      We accomplish this feat by creating a special
      sequence to synchronize with the hw IRQ handler
      using a binary state and synchronize_irq().
      This idea is from Herbert Xu.
      
      Thanks to Michael Chan for helping to track down
      all of the race conditions in initial versions
      of this code.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f47c11ee
  2. 19 5月, 2005 2 次提交
    • D
      [TG3]: Set minimal hw interrupt mitigation. · 15f9850d
      David S. Miller 提交于
      Even though we do software interrupt mitigation
      via NAPI, it still helps to have some minimal
      hw assisted mitigation.
      
      This helps, particularly, on systems where register
      I/O overhead is much greater than the CPU horsepower.
      
      For example, it helps on NUMA systems.  In such cases
      the PIO overhead to disable interrupts for NAPI accounts
      for the majority of the packet processing cost.  The
      CPU is fast enough such that only a single packet is
      processed by each NAPI poll call.
      
      Thanks to Michael Chan for reviewing this patch.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      15f9850d
    • D
      [TG3]: Add tagged status support. · fac9b83e
      David S. Miller 提交于
      When supported, use the TAGGED interrupt processing support
      the chip provides.  In this mode, instead of a "on/off" binary
      semaphore, an incrementing tag scheme is used to ACK interrupts.
      
      All MSI supporting chips support TAGGED mode, so the tg3_msi()
      interrupt handler uses it unconditionally.  This invariant is
      verified when MSI support is tested.
      
      Since we can invoke tg3_poll() multiple times per interrupt under
      high packet load, we fetch a new copy of the tag value in the
      status block right before we actually do the work.
      
      Also, because the tagged status tells the chip exactly which
      work we have processed, we can make two optimizations:
      
      1) tg3_restart_ints() need not check tg3_has_work()
      2) the tg3_timer() need not poke the chip 10 times per
         second to keep from losing interrupt events
      
      Based upon valuable feedback from Michael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fac9b83e
  3. 22 4月, 2005 9 次提交
  4. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4