@@ -1048,9 +1048,11 @@ static void iwl_bg_restart(struct work_struct *data)
1048
1048
*
1049
1049
*****************************************************************************/
1050
1050
1051
- static void iwl_setup_deferred_work (struct iwl_priv * priv )
1051
+ static int iwl_setup_deferred_work (struct iwl_priv * priv )
1052
1052
{
1053
1053
priv -> workqueue = alloc_ordered_workqueue (DRV_NAME , 0 );
1054
+ if (!priv -> workqueue )
1055
+ return - ENOMEM ;
1054
1056
1055
1057
INIT_WORK (& priv -> restart , iwl_bg_restart );
1056
1058
INIT_WORK (& priv -> beacon_update , iwl_bg_beacon_update );
@@ -1067,6 +1069,8 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
1067
1069
timer_setup (& priv -> statistics_periodic , iwl_bg_statistics_periodic , 0 );
1068
1070
1069
1071
timer_setup (& priv -> ucode_trace , iwl_bg_ucode_trace , 0 );
1072
+
1073
+ return 0 ;
1070
1074
}
1071
1075
1072
1076
void iwl_cancel_deferred_work (struct iwl_priv * priv )
@@ -1454,7 +1458,9 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
1454
1458
/********************
1455
1459
* 6. Setup services
1456
1460
********************/
1457
- iwl_setup_deferred_work (priv );
1461
+ if (iwl_setup_deferred_work (priv ))
1462
+ goto out_uninit_drv ;
1463
+
1458
1464
iwl_setup_rx_handlers (priv );
1459
1465
1460
1466
iwl_power_initialize (priv );
@@ -1492,6 +1498,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
1492
1498
iwl_cancel_deferred_work (priv );
1493
1499
destroy_workqueue (priv -> workqueue );
1494
1500
priv -> workqueue = NULL ;
1501
+ out_uninit_drv :
1495
1502
iwl_uninit_drv (priv );
1496
1503
out_free_eeprom_blob :
1497
1504
kfree (priv -> eeprom_blob );
0 commit comments