There is a possibility of a deadlock due to the way locks are
acquired and released in qib_set_uevent_bits(). The function
qib_set_uevent_bits() is called in process context and it uses
spin_lock() and spin_unlock().  This same lock is acquired/released
in interrupt context which can lead to a deadlock when running on
the same cpu.
The fix is to replace spin_lock() and spin_unlock() with
spin_lock_irqsave() and spin_unlock_irqrestore() respectively in
qib_set_uevent_bits().
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
        struct qib_ctxtdata *rcd;
        unsigned ctxt;
        int ret = 0;
+       unsigned long flags;
 
-       spin_lock(&ppd->dd->uctxt_lock);
+       spin_lock_irqsave(&ppd->dd->uctxt_lock, flags);
        for (ctxt = ppd->dd->first_user_ctxt; ctxt < ppd->dd->cfgctxts;
             ctxt++) {
                rcd = ppd->dd->rcd[ctxt];
                ret = 1;
                break;
        }
-       spin_unlock(&ppd->dd->uctxt_lock);
+       spin_unlock_irqrestore(&ppd->dd->uctxt_lock, flags);
 
        return ret;
 }