@@ -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