Subject: skip unnecessary scan to avoid WARN in core.c and sme.c

Some cases, wpa_supplicant will request a scan during net interface disabling
This will cause a wrong state in CFG80211 layer and get WARN in core.c and 
sem.c.

Add a protection in driver's close function to return this scan request and set 
request to NULL.

This is also related to [Bug 3337] calltrace when connect to second wep key and 
disable wifi

Signed-off-by: Samuel Chang <[email protected]>


diff -ruN kernel-2.6.37.6-151.5/drivers/staging/ar6003/os/linux/ar6000_drv.c 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch/drivers/staging/ar6003/os/linux/ar6000_drv.c
--- kernel-2.6.37.6-151.5/drivers/staging/ar6003/os/linux/ar6000_drv.c  
2011-07-15 23:59:50.136990718 +0800
+++ 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch/drivers/staging/ar6003/os/linux/ar6000_drv.c
      2011-07-18 16:16:07.816871251 +0800
@@ -2755,12 +2755,18 @@
 #ifdef ATH6K_CONFIG_CFG80211
     ar6000_disconnect(arPriv);
 
+    if (arPriv->scan_request) {
+       cfg80211_scan_done(arPriv->scan_request, true);
+       arPriv->scan_request = NULL;
+    }
+
+    arPriv->arSoftc->arWlanState = WLAN_DISABLED;
+
     if(arPriv->arSoftc->arWmiReady == TRUE) {
         if (wmi_scanparams_cmd(arPriv->arWmi, 0xFFFF, 0,
                                0, 0, 0, 0, 0, 0, 0, 0) != A_OK) {
             return -EIO;
         }
-        arPriv->arSoftc->arWlanState = WLAN_DISABLED;
     }
 #endif /* ATH6K_CONFIG_CFG80211 */
 
Subject: skip unnecessary_scan

Some cases, wpa_supplicant will request a scan during net interface disabling
This will cause a wrong state in CFG80211 layer and get WARN in core.c and sem.c.

Add a protection in driver's close function to return this scan request and set request to NULL.

This is also related to [Bug 3337] calltrace when connect to second wep key and disable wifi

Signed-off-by: Samuel Chang <[email protected]>


diff -ruN kernel-2.6.37.6-151.5/drivers/staging/ar6003/os/linux/ar6000_drv.c kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch/drivers/staging/ar6003/os/linux/ar6000_drv.c
--- kernel-2.6.37.6-151.5/drivers/staging/ar6003/os/linux/ar6000_drv.c	2011-07-15 23:59:50.136990718 +0800
+++ kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch/drivers/staging/ar6003/os/linux/ar6000_drv.c	2011-07-18 16:16:07.816871251 +0800
@@ -2755,12 +2755,18 @@
 #ifdef ATH6K_CONFIG_CFG80211
     ar6000_disconnect(arPriv);
 
+    if (arPriv->scan_request) {
+	cfg80211_scan_done(arPriv->scan_request, true);
+       arPriv->scan_request = NULL;
+    }
+
+    arPriv->arSoftc->arWlanState = WLAN_DISABLED;
+
     if(arPriv->arSoftc->arWmiReady == TRUE) {
         if (wmi_scanparams_cmd(arPriv->arWmi, 0xFFFF, 0,
                                0, 0, 0, 0, 0, 0, 0, 0) != A_OK) {
             return -EIO;
         }
-        arPriv->arSoftc->arWlanState = WLAN_DISABLED;
     }
 #endif /* ATH6K_CONFIG_CFG80211 */
 
_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to