--- /dev/null
+From: Kolekar, Abhijeet <abhijeet.kolekar@intel.com>
+Subject: iwl3945: release resources before shutting down
+Patch-mainline: 2.6.30
+Reference: bnc#495816
+
+Release resource before shutting down and notify upper stack.
+
+Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Acked-by: Helmut Schaa <hschaa@suse.de>
+Acked-by: Jiri Benc <jbenc@suse.cz>
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
+index 38b1f90..722fc44 100644
+--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
++++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
+@@ -8105,7 +8105,12 @@ static void __devexit iwl3945_pci_remove(struct pci_dev *pdev)
+
+ set_bit(STATUS_EXIT_PENDING, &priv->status);
+
+- iwl3945_down(priv);
++ if (priv->mac80211_registered) {
++ ieee80211_unregister_hw(priv->hw);
++ priv->mac80211_registered = 0;
++ } else {
++ iwl3945_down(priv);
++ }
+
+ /* make sure we flush any pending irq or
+ * tasklet for the driver
+@@ -8130,9 +8130,6 @@ static void __devexit iwl3945_pci_remove(struct pci_dev *pdev)
+ iwl3945_unset_hw_setting(priv);
+ iwl3945_clear_stations_table(priv);
+
+- if (priv->mac80211_registered)
+- ieee80211_unregister_hw(priv->hw);
+-
+ /*netif_stop_queue(dev); */
+ flush_workqueue(priv->workqueue);
+