aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index ba0fdba602cd..ae8eb09f8011 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1741,6 +1741,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
1741 1741
1742 /* We have our copies now, allow OS release its copies */ 1742 /* We have our copies now, allow OS release its copies */
1743 release_firmware(ucode_raw); 1743 release_firmware(ucode_raw);
1744 complete(&priv->firmware_loading_complete);
1744 return; 1745 return;
1745 1746
1746 try_again: 1747 try_again:
@@ -1754,6 +1755,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
1754 IWL_ERR(priv, "failed to allocate pci memory\n"); 1755 IWL_ERR(priv, "failed to allocate pci memory\n");
1755 iwl_dealloc_ucode_pci(priv); 1756 iwl_dealloc_ucode_pci(priv);
1756 out_unbind: 1757 out_unbind:
1758 complete(&priv->firmware_loading_complete);
1757 device_release_driver(&priv->pci_dev->dev); 1759 device_release_driver(&priv->pci_dev->dev);
1758 release_firmware(ucode_raw); 1760 release_firmware(ucode_raw);
1759} 1761}
@@ -3671,6 +3673,8 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3671 iwl_power_initialize(priv); 3673 iwl_power_initialize(priv);
3672 iwl_tt_initialize(priv); 3674 iwl_tt_initialize(priv);
3673 3675
3676 init_completion(&priv->firmware_loading_complete);
3677
3674 err = iwl_request_firmware(priv, true); 3678 err = iwl_request_firmware(priv, true);
3675 if (err) 3679 if (err)
3676 goto out_remove_sysfs; 3680 goto out_remove_sysfs;
@@ -3711,6 +3715,8 @@ static void __devexit iwl_pci_remove(struct pci_dev *pdev)
3711 if (!priv) 3715 if (!priv)
3712 return; 3716 return;
3713 3717
3718 wait_for_completion(&priv->firmware_loading_complete);
3719
3714 IWL_DEBUG_INFO(priv, "*** UNLOAD DRIVER ***\n"); 3720 IWL_DEBUG_INFO(priv, "*** UNLOAD DRIVER ***\n");
3715 3721
3716 iwl_dbgfs_unregister(priv); 3722 iwl_dbgfs_unregister(priv);
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index ef1720a852e9..4d4c6516430a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1304,6 +1304,8 @@ struct iwl_priv {
1304 struct delayed_work alive_start; 1304 struct delayed_work alive_start;
1305 struct delayed_work scan_check; 1305 struct delayed_work scan_check;
1306 1306
1307 struct completion firmware_loading_complete;
1308
1307 /*For 3945 only*/ 1309 /*For 3945 only*/
1308 struct delayed_work thermal_periodic; 1310 struct delayed_work thermal_periodic;
1309 struct delayed_work rfkill_poll; 1311 struct delayed_work rfkill_poll;