|
@@ -311,8 +311,17 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
|
|
|
rcfw->aeq_handler(rcfw, qp_event, qp);
|
|
|
break;
|
|
|
default:
|
|
|
- /* Command Response */
|
|
|
- spin_lock_irqsave(&cmdq->lock, flags);
|
|
|
+ /*
|
|
|
+ * Command Response
|
|
|
+ * cmdq->lock needs to be acquired to synchronie
|
|
|
+ * the command send and completion reaping. This function
|
|
|
+ * is always called with creq->lock held. Using
|
|
|
+ * the nested variant of spin_lock.
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ spin_lock_irqsave_nested(&cmdq->lock, flags,
|
|
|
+ SINGLE_DEPTH_NESTING);
|
|
|
cookie = le16_to_cpu(qp_event->cookie);
|
|
|
mcookie = qp_event->cookie;
|
|
|
blocked = cookie & RCFW_CMD_IS_BLOCKING;
|