@@ -230,10 +230,9 @@ void bnxt_ulp_stop(struct bnxt *bp)
230230		return ;
231231
232232	mutex_lock (& edev -> en_dev_lock );
233- 	if  (!bnxt_ulp_registered (edev )) {
234- 		mutex_unlock (& edev -> en_dev_lock );
235- 		return ;
236- 	}
233+ 	if  (!bnxt_ulp_registered (edev ) || 
234+ 	    (edev -> flags  &  BNXT_EN_FLAG_ULP_STOPPED ))
235+ 		goto ulp_stop_exit ;
237236
238237	edev -> flags  |= BNXT_EN_FLAG_ULP_STOPPED ;
239238	if  (aux_priv ) {
@@ -249,6 +248,7 @@ void bnxt_ulp_stop(struct bnxt *bp)
249248			adrv -> suspend (adev , pm );
250249		}
251250	}
251+ ulp_stop_exit :
252252	mutex_unlock (& edev -> en_dev_lock );
253253}
254254
@@ -257,19 +257,13 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
257257	struct  bnxt_aux_priv  * aux_priv  =  bp -> aux_priv ;
258258	struct  bnxt_en_dev  * edev  =  bp -> edev ;
259259
260- 	if  (!edev )
261- 		return ;
262- 
263- 	edev -> flags  &= ~BNXT_EN_FLAG_ULP_STOPPED ;
264- 
265- 	if  (err )
260+ 	if  (!edev  ||  err )
266261		return ;
267262
268263	mutex_lock (& edev -> en_dev_lock );
269- 	if  (!bnxt_ulp_registered (edev )) {
270- 		mutex_unlock (& edev -> en_dev_lock );
271- 		return ;
272- 	}
264+ 	if  (!bnxt_ulp_registered (edev ) || 
265+ 	    !(edev -> flags  &  BNXT_EN_FLAG_ULP_STOPPED ))
266+ 		goto ulp_start_exit ;
273267
274268	if  (edev -> ulp_tbl -> msix_requested )
275269		bnxt_fill_msix_vecs (bp , edev -> msix_entries );
@@ -286,6 +280,8 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
286280			adrv -> resume (adev );
287281		}
288282	}
283+ ulp_start_exit :
284+ 	edev -> flags  &= ~BNXT_EN_FLAG_ULP_STOPPED ;
289285	mutex_unlock (& edev -> en_dev_lock );
290286}
291287
0 commit comments