@@ -321,7 +321,11 @@ static void irdma_process_aeq(struct irdma_pci_f *rf)
321321 break ;
322322 case IRDMA_AE_QP_SUSPEND_COMPLETE :
323323 if (iwqp -> iwdev -> vsi .tc_change_pending ) {
324- atomic_dec (& iwqp -> sc_qp .vsi -> qp_suspend_reqs );
324+ if (!atomic_dec_return (& qp -> vsi -> qp_suspend_reqs ))
325+ wake_up (& iwqp -> iwdev -> suspend_wq );
326+ }
327+ if (iwqp -> suspend_pending ) {
328+ iwqp -> suspend_pending = false;
325329 wake_up (& iwqp -> iwdev -> suspend_wq );
326330 }
327331 break ;
@@ -383,6 +387,7 @@ static void irdma_process_aeq(struct irdma_pci_f *rf)
383387 case IRDMA_AE_LLP_TOO_MANY_RETRIES :
384388 case IRDMA_AE_LCE_QP_CATASTROPHIC :
385389 case IRDMA_AE_LCE_FUNCTION_CATASTROPHIC :
390+ case IRDMA_AE_LLP_TOO_MANY_RNRS :
386391 case IRDMA_AE_LCE_CQ_CATASTROPHIC :
387392 case IRDMA_AE_UDA_XMIT_DGRAM_TOO_LONG :
388393 default :
@@ -588,9 +593,6 @@ static void irdma_destroy_cqp(struct irdma_pci_f *rf)
588593 struct irdma_cqp * cqp = & rf -> cqp ;
589594 int status = 0 ;
590595
591- if (rf -> cqp_cmpl_wq )
592- destroy_workqueue (rf -> cqp_cmpl_wq );
593-
594596 status = irdma_sc_cqp_destroy (dev -> cqp );
595597 if (status )
596598 ibdev_dbg (to_ibdev (dev ), "ERR: Destroy CQP failed %d\n" , status );
@@ -755,6 +757,9 @@ static void irdma_destroy_ccq(struct irdma_pci_f *rf)
755757 struct irdma_ccq * ccq = & rf -> ccq ;
756758 int status = 0 ;
757759
760+ if (rf -> cqp_cmpl_wq )
761+ destroy_workqueue (rf -> cqp_cmpl_wq );
762+
758763 if (!rf -> reset )
759764 status = irdma_sc_ccq_destroy (dev -> ccq , 0 , true);
760765 if (status )
@@ -1187,7 +1192,6 @@ static int irdma_create_ceq(struct irdma_pci_f *rf, struct irdma_ceq *iwceq,
11871192 int status ;
11881193 struct irdma_ceq_init_info info = {};
11891194 struct irdma_sc_dev * dev = & rf -> sc_dev ;
1190- u64 scratch ;
11911195 u32 ceq_size ;
11921196
11931197 info .ceq_id = ceq_id ;
@@ -1208,14 +1212,13 @@ static int irdma_create_ceq(struct irdma_pci_f *rf, struct irdma_ceq *iwceq,
12081212 iwceq -> sc_ceq .ceq_id = ceq_id ;
12091213 info .dev = dev ;
12101214 info .vsi = vsi ;
1211- scratch = (uintptr_t )& rf -> cqp .sc_cqp ;
12121215 status = irdma_sc_ceq_init (& iwceq -> sc_ceq , & info );
12131216 if (!status ) {
12141217 if (dev -> ceq_valid )
12151218 status = irdma_cqp_ceq_cmd (& rf -> sc_dev , & iwceq -> sc_ceq ,
12161219 IRDMA_OP_CEQ_CREATE );
12171220 else
1218- status = irdma_sc_cceq_create (& iwceq -> sc_ceq , scratch );
1221+ status = irdma_sc_cceq_create (& iwceq -> sc_ceq , 0 );
12191222 }
12201223
12211224 if (status ) {
0 commit comments