1. 10 10月, 2008 1 次提交
  2. 09 10月, 2008 2 次提交
  3. 04 10月, 2008 2 次提交
  4. 01 10月, 2008 17 次提交
  5. 30 9月, 2008 2 次提交
  6. 26 9月, 2008 1 次提交
  7. 21 9月, 2008 4 次提交
  8. 17 9月, 2008 2 次提交
    • Y
      IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop() · e8224e4b
      Yossi Etigin 提交于
      Taking rtnl_lock in ipoib_mcast_join_complete() causes a deadlock with
      ipoib_stop().  We avoid it by scheduling the piece of code that takes
      the lock on ipoib_workqueue instead of executing it directly.  This
      works because we only flush the ipoib_workqueue with the RTNL not held.
      
      The deadlock happens because ipoib_stop() calls ipoib_ib_dev_down()
      which calls ipoib_mcast_dev_flush(), which calls ipoib_mcast_free(),
      which calls ipoib_mcast_leave(). The latter calls
      ib_sa_free_multicast(), and this waits until the multicast completion
      handler finishes.  This handler is ipoib_mcast_join_complete(), which
      waits for the rtnl_lock(), which was already taken by ipoib_stop().
      
      This bug was introduced in commit a77a57a1 ("IPoIB: Fix deadlock on
      RTNL in ipoib_stop()").
      Signed-off-by: NYossi Etigin <yosefe@voltaire.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      e8224e4b
    • F
      RDMA/nes: Fix client side QP destroy · d7ffd507
      Faisal Latif 提交于
      Fix QP not being destroyed properly on the client, which leads to
      userspace programs hanging on exit.  This is a missing chunk from the
      connection management rewrite in commit 6492cdf3 ("RDMA/nes: CM
      connection setup/teardown rework").
      Signed-off-by: NFaisal Latif <flatif@neteffect.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      d7ffd507
  9. 16 9月, 2008 1 次提交
  10. 28 8月, 2008 1 次提交
  11. 24 8月, 2008 1 次提交
  12. 20 8月, 2008 1 次提交
    • R
      IPoIB: Fix deadlock on RTNL in ipoib_stop() · a77a57a1
      Roland Dreier 提交于
      Commit c8c2afe3 ("IPoIB: Use rtnl lock/unlock when changing device
      flags") added a call to rtnl_lock() in ipoib_mcast_join_task(), which
      is run from the ipoib_workqueue.  However, ipoib_stop() (which is run
      inside rtnl_lock()) flushes this workqueue, which leads to a deadlock
      if the join task is pending.
      
      Fix this by simply not flushing the workqueue from ipoib_stop().  It
      turns out that we really don't care about workqueue tasks running
      during or after ipoib_stop(), as long as we make sure to flush the
      workqueue before unregistering a netdev.
      
      This fixes <https://bugs.openfabrics.org/show_bug.cgi?id=1114>.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      a77a57a1
  13. 16 8月, 2008 2 次提交
  14. 13 8月, 2008 3 次提交
    • A
      IB/ehca: Discard double CQE for one WR · 6773f079
      Alexander Schmidt 提交于
      Under rare circumstances, the ehca hardware might erroneously generate
      two CQEs for the same WQE, which is not compliant to the IB spec and
      will cause unpredictable errors like memory being freed twice. To
      avoid this problem, the driver needs to detect the second CQE and
      discard it.
      
      For this purpose, introduce an array holding as many elements as the
      SQ of the QP, called sq_map. Each sq_map entry stores a "reported"
      flag for one WQE in the SQ. When a work request is posted to the SQ,
      the respective "reported" flag is set to zero. After the arrival of a
      CQE, the flag is set to 1, which allows to detect the occurence of a
      second CQE.
      
      The mapping between WQE / CQE and the corresponding sq_map element is
      implemented by replacing the lowest 16 Bits of the wr_id with the
      index in the queue map. The original 16 Bits are stored in the sq_map
      entry and are restored when the CQE is passed to the application.
      Signed-off-by: NAlexander Schmidt <alexs@linux.vnet.ibm.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      6773f079
    • A
      IB/ehca: Check idr_find() return value · 129a10fb
      Alexander Schmidt 提交于
      The idr_find() function may fail when trying to get the QP that is
      associated with a CQE, e.g. when a QP has been destroyed between the
      generation of a CQE and the poll request for it.  In consequence, the
      return value of idr_find() must be checked and the CQE must be
      discarded when the QP cannot be found.
      Signed-off-by: NAlexander Schmidt <alexs@linux.vnet.ibm.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      129a10fb
    • A
      IB/ehca: Repoll CQ on invalid opcode · 17c2b53a
      Alexander Schmidt 提交于
      When the ehca driver detects an invalid opcode in a CQE, it currently
      passes the CQE to the application and returns with success. This patch
      changes the CQE handling to discard CQEs with invalid opcodes and to
      continue reading the next CQE from the CQ.
      Signed-off-by: NAlexander Schmidt <alexs@linux.vnet.ibm.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      17c2b53a