@@ -1323,6 +1323,13 @@ static int qed_iwarp_wait_for_all_cids(struct qed_hwfn *p_hwfn)
int rc;
int i;
+ /* If the HW device is during recovery, all resources are immediately
+ * reset without receiving a per-cid indication from HW. In this case
+ * we don't expect the cid_map to be cleared.
+ */
+ if (p_hwfn->cdev->recov_in_prog)
+ return 0;
+
rc = qed_iwarp_wait_cid_map_cleared(p_hwfn,
&p_hwfn->p_rdma_info->tcp_cid_map);
if (rc)
@@ -71,6 +71,13 @@ void qed_roce_stop(struct qed_hwfn *p_hwfn)
struct qed_bmap *rcid_map = &p_hwfn->p_rdma_info->real_cid_map;
int wait_count = 0;
+ /* If the HW device is during recovery, all resources are immediately
+ * reset without receiving a per-cid indication from HW. In this case
+ * we don't expect the cid bitmap to be cleared.
+ */
+ if (p_hwfn->cdev->recov_in_prog)
+ return;
+
/* when destroying a_RoCE QP the control is returned to the user after
* the synchronous part. The asynchronous part may take a little longer.
* We delay for a short while if an async destroy QP is still expected.