1. 12 7月, 2007 1 次提交
    • M
      [TG3]: Fix irq_sync race condition. · 46966545
      Michael Chan 提交于
      Gagan Arneja <gaagaan@gmail.com> pointed out that tg3_reset_task()
      could potentially race with another thread calling tg3_full_lock()
      such as the ethtool_set_xxx() functions.  This may trigger the
      BUG_ON() in tg3_irq_quiesce() or cause the irq_sync flag to be out-
      of-sync.
      
      I think the easiest way to fix this is to get the tp->lock first
      before setting the irq_sync flag.  This is safe to do because the
      tp->lock is never grabbed by the irq handler.  This change will
      guarantee that the irq_sync flag updates will be serialized.  We also
      have to change one spot to call tg3_netif_start() (which clears the
      irq_sync flag) before releasing the tp->lock.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      46966545
  2. 11 7月, 2007 1 次提交
    • S
      [NET]: IPV6 checksum offloading in network devices · d212f87b
      Stephen Hemminger 提交于
      The existing model for checksum offload does not correctly handle
      devices that can offload IPV4 and IPV6 only. The NETIF_F_HW_CSUM flag
      implies device can do any arbitrary protocol.
      
      This patch:
       * adds NETIF_F_IPV6_CSUM for those devices
       * fixes bnx2 and tg3 devices that need it
       * add NETIF_F_IPV6_CSUM to ipv6 output (incl GSO)
       * fixes assumptions about NETIF_F_ALL_CSUM in nat
       * adjusts bridge union of checksumming computation
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d212f87b
  3. 04 6月, 2007 1 次提交
    • M
      [TG3]: Fix link problem on Dell's onboard 5906. · 007a880d
      Michael Chan 提交于
      The bug is caused by code that always set
      (TG3_FLAG_USE_MI_INTERRUPT | TG3_FLAG_USE_LINKCHG_REG) on all Dell's
      onboard devices.  With these 2 flags set, the link status is polled
      by tg3_timer() and will only work when the PHY is set up to interrupt
      the MAC on link changes.  This breaks 5906 because the 5906 PHY does
      not support TG3_FLAG_USE_MI_INTERRUPT the same as other PHYs.
      
      For correctness, only Dell's onboard 5701 needs these 2 flags to be
      set.  This change will fix the 5906 problem and will change other
      Dell devices except 5700 and 5701 to use the more efficient
      interrupt-driven link changes.
      
      Update version to 3.77.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      007a880d
  4. 03 6月, 2007 1 次提交
  5. 10 5月, 2007 2 次提交
  6. 07 5月, 2007 3 次提交
  7. 06 5月, 2007 8 次提交
  8. 26 4月, 2007 8 次提交
  9. 07 4月, 2007 1 次提交
  10. 26 3月, 2007 3 次提交
  11. 03 3月, 2007 1 次提交
  12. 27 2月, 2007 1 次提交
    • M
      [TG3]: TSO workaround fixes. · 7f62ad5d
      Michael Chan 提交于
      1.  Add race condition check after netif_stop_queue().  tg3_tx() runs
          without netif_tx_lock and can race with tg3_start_xmit_dma_bug() ->
          tg3_tso_bug().
      
      2.  Firmware TSO in 5703/5704/5705 also have the same TSO limitation,
          i.e. they cannot handle TSO headers bigger than 80 bytes.  Rename
          TG3_FL2_HW_TSO_1_BUG to TG3_FL2_TSO_BUG and set this flag on
          these chips as well.
      
      3.  Update version to 3.74.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7f62ad5d
  13. 14 2月, 2007 8 次提交
  14. 09 2月, 2007 1 次提交
    • E
      [TG3]: Avoid an expensive divide. · 6b31a515
      Eric Dumazet 提交于
      During an oprofile session of linux-2.6.20 on a dual opteron system, I noticed
      an expensive divide was done in tg3_poll().
      
      I am using gcc-4.1.1, so the following comment from drivers/net/tg3.c seems
      over-optimistic :
      
      /* Do not place this n-ring entries value into the tp struct itself,
        * we really want to expose these constants to GCC so that modulo et
        * al.  operations are done with shifts and masks instead of with
        * hw multiply/modulo instructions.  Another solution would be to
        * replace things like '% foo' with '& (foo - 1)'.
        */
      #define TG3_RX_RCB_RING_SIZE(tp)        \
               ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ?  512 : 1024)
      
      Assembly code before patch :
      (oprofile results included)
         6434  0.0088 :ffffffff803684b9:       mov    0x6f0(%r15),%eax
          587 8.0e-04 :ffffffff803684c0:       and    $0x40000,%eax
         2170  0.0030 :ffffffff803684c5:       cmp    $0x1,%eax
                      :ffffffff803684c8:       lea    0x1(%r13),%eax
                      :ffffffff803684cc:       sbb    %ecx,%ecx
         2051  0.0028 :ffffffff803684ce:       xor    %edx,%edx
                      :ffffffff803684d0:       and    $0x200,%ecx
           20 2.7e-05 :ffffffff803684d6:       add    $0x200,%ecx
         1986  0.0027 :ffffffff803684dc:       div    %ecx
      103427  0.1410 :ffffffff803684de:       cmp    %edx,0xffffffffffffff7c(%rbp)
      
      Assembly code after the suggested patch :
      
      ffffffff803684b9:           mov    0x6f0(%r15),%eax
      ffffffff803684c0:           and    $0x40000,%eax
      ffffffff803684c5:           cmp    $0x1,%eax
      ffffffff803684c8:           sbb    %eax,%eax
      ffffffff803684ca:           inc    %r13d
      ffffffff803684cd:           and    $0x200,%eax
      ffffffff803684d2:           add    $0x1ff,%eax
      ffffffff803684d7:           and    %eax,%r13d
      ffffffff803684da:           cmp    %r13d,0xffffffffffffff7c(%rbp)
      Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
      Acked-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6b31a515