@@ -244,11 +244,16 @@ static int pdsc_init_pf(struct pdsc *pdsc)
244
244
set_bit (PDSC_S_FW_DEAD , & pdsc -> state );
245
245
246
246
err = pdsc_setup (pdsc , PDSC_SETUP_INIT );
247
- if (err )
247
+ if (err ) {
248
+ mutex_unlock (& pdsc -> config_lock );
248
249
goto err_out_unmap_bars ;
250
+ }
251
+
249
252
err = pdsc_start (pdsc );
250
- if (err )
253
+ if (err ) {
254
+ mutex_unlock (& pdsc -> config_lock );
251
255
goto err_out_teardown ;
256
+ }
252
257
253
258
mutex_unlock (& pdsc -> config_lock );
254
259
@@ -257,13 +262,15 @@ static int pdsc_init_pf(struct pdsc *pdsc)
257
262
err = devl_params_register (dl , pdsc_dl_params ,
258
263
ARRAY_SIZE (pdsc_dl_params ));
259
264
if (err ) {
265
+ devl_unlock (dl );
260
266
dev_warn (pdsc -> dev , "Failed to register devlink params: %pe\n" ,
261
267
ERR_PTR (err ));
262
- goto err_out_unlock_dl ;
268
+ goto err_out_stop ;
263
269
}
264
270
265
271
hr = devl_health_reporter_create (dl , & pdsc_fw_reporter_ops , 0 , pdsc );
266
272
if (IS_ERR (hr )) {
273
+ devl_unlock (dl );
267
274
dev_warn (pdsc -> dev , "Failed to create fw reporter: %pe\n" , hr );
268
275
err = PTR_ERR (hr );
269
276
goto err_out_unreg_params ;
@@ -279,15 +286,13 @@ static int pdsc_init_pf(struct pdsc *pdsc)
279
286
return 0 ;
280
287
281
288
err_out_unreg_params :
282
- devl_params_unregister (dl , pdsc_dl_params ,
283
- ARRAY_SIZE (pdsc_dl_params ));
284
- err_out_unlock_dl :
285
- devl_unlock (dl );
289
+ devlink_params_unregister (dl , pdsc_dl_params ,
290
+ ARRAY_SIZE (pdsc_dl_params ));
291
+ err_out_stop :
286
292
pdsc_stop (pdsc );
287
293
err_out_teardown :
288
294
pdsc_teardown (pdsc , PDSC_TEARDOWN_REMOVING );
289
295
err_out_unmap_bars :
290
- mutex_unlock (& pdsc -> config_lock );
291
296
del_timer_sync (& pdsc -> wdtimer );
292
297
if (pdsc -> wq )
293
298
destroy_workqueue (pdsc -> wq );
0 commit comments