iwlwifi: use request_module instead of _nowait
authorJohannes Berg <johannes.berg@intel.com>
Tue, 12 Jun 2012 17:50:43 +0000 (19:50 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 13 Jun 2012 07:02:03 +0000 (09:02 +0200)
Since request_module_nowait() can't be backported
use request_module() instead -- we don't need the
asynchronous behaviour of request_module_nowait()
here since we're running in the firmware request
work struct.

Tested-by: Donald H Fry <donald.h.fry@intel.com>
Reviewed-by: Donald H Fry <donald.h.fry@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/iwl-drv.c

index 80898bb808b5a36493cea945752e34f6fe5d9658..095547b37a274ac90e3615a8f7bf8c9275b2b776 100644 (file)
@@ -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: