|
@@ -778,6 +778,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
|
|
|
const unsigned int api_min = drv->cfg->ucode_api_min;
|
|
|
u32 api_ver;
|
|
|
int i;
|
|
|
+ bool load_module = false;
|
|
|
|
|
|
fw->ucode_capa.max_probe_length = 200;
|
|
|
fw->ucode_capa.standard_phy_calibration_size =
|
|
@@ -913,7 +914,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
|
|
|
if (!drv->op_mode)
|
|
|
goto out_unbind;
|
|
|
} else {
|
|
|
- request_module_nowait("%s", op->name);
|
|
|
+ load_module = true;
|
|
|
}
|
|
|
mutex_unlock(&iwlwifi_opmode_table_mtx);
|
|
|
|
|
@@ -923,6 +924,14 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
|
|
|
* are doing the start() above.
|
|
|
*/
|
|
|
complete(&drv->request_firmware_complete);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Load the module last so we don't block anything
|
|
|
+ * else from proceeding if the module fails to load
|
|
|
+ * or hangs loading.
|
|
|
+ */
|
|
|
+ if (load_module)
|
|
|
+ request_module("%s", op->name);
|
|
|
return;
|
|
|
|
|
|
try_again:
|