1. 03 12月, 2008 1 次提交
    • M
      bnx2: Add workaround to handle missed MSI. · efba0180
      Michael Chan 提交于
      The bnx2 chips do not support per MSI vector masking.  On 5706/5708, new MSI
      address/data are stored only when the MSI enable bit is toggled.  As a result,
      SMP affinity no longer works in the latest kernel.  A more serious problem is
      that the driver will no longer receive interrupts when the MSI receiving CPU
      goes offline.
      
      The workaround in this patch only addresses the problem of CPU going offline.
      When that happens, the driver's timer function will detect that it is making
      no forward progress on pending interrupt events and will recover from it.
      
      Eric Dumazet reported the problem.
      
      We also found that if an interrupt is internally asserted while MSI and INTA
      are disabled, the chip will end up in the same state after MSI is re-enabled.
      The same workaround is needed for this problem. 
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Tested-by: NEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      efba0180
  2. 10 10月, 2008 1 次提交
  3. 19 9月, 2008 3 次提交
  4. 19 7月, 2008 1 次提交
  5. 15 7月, 2008 2 次提交
  6. 20 6月, 2008 4 次提交
  7. 12 6月, 2008 1 次提交
    • D
      net: Eliminate flush_scheduled_work() calls while RTNL is held. · 4bb073c0
      David S. Miller 提交于
      If the RTNL is held when we invoke flush_scheduled_work() we could
      deadlock.  One such case is linkwatch, it is a work struct which tries
      to grab the RTNL semaphore.
      
      The most common case are net driver ->stop() methods.  The
      simplest conversion is to instead use cancel_{delayed_}work_sync()
      explicitly on the various work struct the driver uses.
      
      This is an OK transformation because these work structs are doing
      things like resetting the chip, restarting link negotiation, and so
      forth.  And if we're bringing down the device, we're about to turn the
      chip off and reset it anways.  So if we cancel a pending work event,
      that's fine here.
      
      Some drivers were working around this deadlock by using a msleep()
      polling loop of some sort, and those cases are converted to instead
      use cancel_{delayed_}work_sync() as well.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4bb073c0
  8. 17 5月, 2008 2 次提交
  9. 24 2月, 2008 1 次提交
  10. 01 2月, 2008 5 次提交
  11. 29 1月, 2008 16 次提交
  12. 11 12月, 2007 1 次提交
    • M
      [BNX2]: Fix RX packet rot. · c09c2627
      Michael Chan 提交于
      Packets can be left in the RX ring if the NAPI budget is reached.
      This is caused by storing the latest rx index at the beginning of
      bnx2_rx_int().  We may not process all the work up to this index
      if the budget is reached and so some packets in the RX ring may rot
      when we later check for more work using this stored rx index.
      
      The fix is to not store this latest hw index and only store the
      processed rx index.  We use a new function bnx2_get_hw_rx_cons()
      to fetch the latest hw rx index.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c09c2627
  13. 11 10月, 2007 2 次提交