The local loopback path for RC can lock the rkey table lock without
blocking interrupts.  The receive interrupt path can then call
ipath_rkey_ok() and deadlock.  Since the lock only protects a 64 bit read,
the lock isn't needed.

Signed-off-by: Bryan O'Sullivan <[EMAIL PROTECTED]>

diff -r 89f7c69a68bf -r 9b9f24aab350 drivers/infiniband/hw/ipath/ipath_keys.c
--- a/drivers/infiniband/hw/ipath/ipath_keys.c  Fri May 12 15:55:27 2006 -0700
+++ b/drivers/infiniband/hw/ipath/ipath_keys.c  Fri May 12 15:55:27 2006 -0700
@@ -136,9 +136,7 @@ int ipath_lkey_ok(struct ipath_lkey_tabl
                ret = 1;
                goto bail;
        }
-       spin_lock(&rkt->lock);
        mr = rkt->table[(sge->lkey >> (32 - ib_ipath_lkey_table_size))];
-       spin_unlock(&rkt->lock);
        if (unlikely(mr == NULL || mr->lkey != sge->lkey)) {
                ret = 0;
                goto bail;
@@ -184,8 +182,6 @@ bail:
  * @acc: access flags
  *
  * Return 1 if successful, otherwise 0.
- *
- * The QP r_rq.lock should be held.
  */
 int ipath_rkey_ok(struct ipath_ibdev *dev, struct ipath_sge_state *ss,
                  u32 len, u64 vaddr, u32 rkey, int acc)
@@ -196,9 +192,7 @@ int ipath_rkey_ok(struct ipath_ibdev *de
        size_t off;
        int ret;
 
-       spin_lock(&rkt->lock);
        mr = rkt->table[(rkey >> (32 - ib_ipath_lkey_table_size))];
-       spin_unlock(&rkt->lock);
        if (unlikely(mr == NULL || mr->lkey != rkey)) {
                ret = 0;
                goto bail;
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to