libertas: remaining hunks of saner shutdown

Marcelo Tosatti mtosatti at redhat.unroutablecom
Mon Dec 11 15:18:31 EST 2006


Commit:     55cf1c4375aab7c5540078a096e9d82abea158af
Parent:     20832e32a7df8f8eafc6c65073c8f467696c5066
commit 55cf1c4375aab7c5540078a096e9d82abea158af
Author:     Marcelo Tosatti <mtosatti at redhat.com>
AuthorDate: Mon Dec 11 15:59:46 2006 -0200
Commit:     Marcelo Tosatti <mtosatti at redhat.com>
CommitDate: Mon Dec 11 15:59:46 2006 -0200

    libertas: remaining hunks of saner shutdown
    
    Subject says it all.
    
    Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
---
 drivers/net/wireless/libertas/if_usb.c      |    6 +++---
 drivers/net/wireless/libertas/wlan_scan.c   |    7 +++++--
 drivers/net/wireless/libertas/wlan_thread.h |    2 ++
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
index 2722490..37cd820 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -351,13 +351,13 @@ static void if_usb_disconnect(struct usb
 		Adapter->SurpriseRemoved = 1;
 	}
 
-	/* Unlink and free urb */
-	if_usb_free(cardp);
-
 	/* card is removed and we can call wlan_remove_card */
 	dprintk(1, "call remove card\n");
 	cardp->remove(cardp);
 
+	/* Unlink and free urb */
+	if_usb_free(cardp);
+
 	usb_set_intfdata(intf, NULL);
 	usb_put_dev(interface_to_usbdev(intf));
 
diff --git a/drivers/net/wireless/libertas/wlan_scan.c b/drivers/net/wireless/libertas/wlan_scan.c
index d8bb118..020aa7f 100644
--- a/drivers/net/wireless/libertas/wlan_scan.c
+++ b/drivers/net/wireless/libertas/wlan_scan.c
@@ -1431,6 +1431,8 @@ int libertas_find_best_network_SSID(wlan
 	memset(pSSID, 0, sizeof(struct WLAN_802_11_SSID));
 
 	wlan_scan_networks(priv, NULL);
+	if (Adapter->SurpriseRemoved)
+		return WLAN_STATUS_FAILURE;
 	wait_event_interruptible(Adapter->cmd_pending, !Adapter->is_cmd_pending);
 
 	i = libertas_find_best_SSID_in_list(Adapter, preferred_mode);
@@ -1524,10 +1526,9 @@ int libertas_send_specific_SSID_scan(wla
 	scanCfg.keepPreviousScan = keepPreviousScan;
 
 	wlan_scan_networks(priv, &scanCfg);
-	wait_event_interruptible(Adapter->cmd_pending, !Adapter->is_cmd_pending);
-
 	if (Adapter->SurpriseRemoved)
 		return WLAN_STATUS_FAILURE;
+	wait_event_interruptible(Adapter->cmd_pending, !Adapter->is_cmd_pending);
 
 	LEAVE();
 	return WLAN_STATUS_SUCCESS;
@@ -1557,6 +1558,8 @@ int libertas_send_specific_BSSID_scan(wl
 	scanCfg.keepPreviousScan = keepPreviousScan;
 
 	wlan_scan_networks(priv, &scanCfg);
+	if (priv->adapter->SurpriseRemoved)
+		return WLAN_STATUS_FAILURE;
 	wait_event_interruptible(priv->adapter->cmd_pending,
 		!priv->adapter->is_cmd_pending);
 
diff --git a/drivers/net/wireless/libertas/wlan_thread.h b/drivers/net/wireless/libertas/wlan_thread.h
index d91d739..c3c0597 100644
--- a/drivers/net/wireless/libertas/wlan_thread.h
+++ b/drivers/net/wireless/libertas/wlan_thread.h
@@ -42,6 +42,8 @@ static inline void wlan_deactivate_threa
 {
 	ENTER();
 
+	thr->pid = 0;
+
 	LEAVE();
 }
 


More information about the Commits-kernel mailing list