OK, I'm not absolutely sure this fixes the cause of the oops you saw,
but I am pretty sure it is a necessary fix.  You can apply the patch
below or just pull the latest subversion.  Remember that the latest
subversion kernel code requires up-to-date libibverbs code as well.

My current theory is that you had two MPI processes exiting
simultaneously, and ib_dealloc_ucontext() ended up accessing the same
struct idr for both processes, which is a no-no.

 - R.

--- infiniband/core/uverbs_main.c       (revision 2193)
+++ infiniband/core/uverbs_main.c       (working copy)
@@ -99,6 +99,8 @@ static int ib_dealloc_ucontext(struct ib
        if (!context)
                return 0;
 
+       down(&ib_uverbs_idr_mutex);
+
        /* XXX Free AHs */
 
        list_for_each_entry_safe(uobj, tmp, &context->qp_list, list) {
@@ -141,6 +143,8 @@ static int ib_dealloc_ucontext(struct ib
                kfree(uobj);
        }
 
+       up(&ib_uverbs_idr_mutex);
+
        return context->device->dealloc_ucontext(context);
 }
 
_______________________________________________
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