@@ -231,10 +231,9 @@ void bnxt_ulp_stop(struct bnxt *bp)
231231 return ;
232232
233233 mutex_lock (& edev -> en_dev_lock );
234- if (!bnxt_ulp_registered (edev )) {
235- mutex_unlock (& edev -> en_dev_lock );
236- return ;
237- }
234+ if (!bnxt_ulp_registered (edev ) ||
235+ (edev -> flags & BNXT_EN_FLAG_ULP_STOPPED ))
236+ goto ulp_stop_exit ;
238237
239238 edev -> flags |= BNXT_EN_FLAG_ULP_STOPPED ;
240239 if (aux_priv ) {
@@ -250,6 +249,7 @@ void bnxt_ulp_stop(struct bnxt *bp)
250249 adrv -> suspend (adev , pm );
251250 }
252251 }
252+ ulp_stop_exit :
253253 mutex_unlock (& edev -> en_dev_lock );
254254}
255255
@@ -258,19 +258,13 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
258258 struct bnxt_aux_priv * aux_priv = bp -> aux_priv ;
259259 struct bnxt_en_dev * edev = bp -> edev ;
260260
261- if (!edev )
262- return ;
263-
264- edev -> flags &= ~BNXT_EN_FLAG_ULP_STOPPED ;
265-
266- if (err )
261+ if (!edev || err )
267262 return ;
268263
269264 mutex_lock (& edev -> en_dev_lock );
270- if (!bnxt_ulp_registered (edev )) {
271- mutex_unlock (& edev -> en_dev_lock );
272- return ;
273- }
265+ if (!bnxt_ulp_registered (edev ) ||
266+ !(edev -> flags & BNXT_EN_FLAG_ULP_STOPPED ))
267+ goto ulp_start_exit ;
274268
275269 if (edev -> ulp_tbl -> msix_requested )
276270 bnxt_fill_msix_vecs (bp , edev -> msix_entries );
@@ -287,6 +281,8 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
287281 adrv -> resume (adev );
288282 }
289283 }
284+ ulp_start_exit :
285+ edev -> flags &= ~BNXT_EN_FLAG_ULP_STOPPED ;
290286 mutex_unlock (& edev -> en_dev_lock );
291287}
292288
0 commit comments