staging: ath6kl: Fixing disappearing of scan list due to jiffies wrap over
authorVipin Mehta <vmehta@atheros.com>
Fri, 18 Feb 2011 21:13:16 +0000 (13:13 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Feb 2011 21:28:53 +0000 (13:28 -0800)
When jiffies wrap-over, all the BSS in the cache is removed. Wrap-over of
jiffies is not handled in the correct way. This cause the scan list to go
empty during this time for a small duration

Signed-off-by: Vipin Mehta <vmehta@atheros.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/ath6kl/os/linux/include/osapi_linux.h
drivers/staging/ath6kl/wlan/src/wlan_node.c

index eb09d43f44e95b488c127607cdeec0d75dbe725c..1957de07b7146abf917a758aac4b7805c484dda2 100644 (file)
@@ -121,7 +121,7 @@ typedef spinlock_t                      A_MUTEX_T;
 
 /* Get current time in ms adding a constant offset (in ms) */
 #define A_GET_MS(offset)    \
-       (jiffies + ((offset) / 1000) * HZ)
+       (((jiffies / HZ) * 1000) + (offset))
 
 /*
  * Timer Functions
index 996b36d01ccba0fda54e98c1d2706c5bf22f91c6..d61cb6ea894ebd646a227c5007cbe9ffaa991881 100644 (file)
@@ -122,7 +122,7 @@ wlan_setup_node(struct ieee80211_node_table *nt, bss_t *ni,
 
     timeoutValue = nt->nt_nodeAge;
 
-    ni->ni_tstamp = A_GET_MS (timeoutValue);
+    ni->ni_tstamp = A_GET_MS (0);
     ni->ni_actcnt = WLAN_NODE_INACT_CNT;
 
     IEEE80211_NODE_LOCK_BH(nt);
@@ -360,7 +360,7 @@ wlan_refresh_inactive_nodes (struct ieee80211_node_table *nt)
         if (A_MEMCMP(myBssid, bss->ni_macaddr, sizeof(myBssid)) != 0)
         {
 
-            if (bss->ni_tstamp <= now || --bss->ni_actcnt == 0)
+            if (((now - bss->ni_tstamp) > timeoutValue)  || --bss->ni_actcnt == 0)
             {
                /*
                 * free up all but the current bss - if set
@@ -381,6 +381,7 @@ wlan_node_timeout (A_ATH_TIMER arg)
     bss_t *bss, *nextBss;
     u8 myBssid[IEEE80211_ADDR_LEN], reArmTimer = false;
     u32 timeoutValue = 0;
+    u32 now = A_GET_MS(0);
 
     timeoutValue = nt->nt_nodeAge;
 
@@ -393,7 +394,7 @@ wlan_node_timeout (A_ATH_TIMER arg)
         if (A_MEMCMP(myBssid, bss->ni_macaddr, sizeof(myBssid)) != 0)
         {
 
-            if (bss->ni_tstamp <= A_GET_MS(0))
+            if ((now - bss->ni_tstamp) > timeoutValue)
             {
                /*
                 * free up all but the current bss - if set