Commit d0e00868 authored by Vipin Mehta's avatar Vipin Mehta Committed by Greg Kroah-Hartman

staging: ath6kl: Fixing disappearing of scan list due to jiffies wrap over

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: default avatarVipin Mehta <vmehta@atheros.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 28f7e85a
...@@ -121,7 +121,7 @@ typedef spinlock_t A_MUTEX_T; ...@@ -121,7 +121,7 @@ typedef spinlock_t A_MUTEX_T;
/* Get current time in ms adding a constant offset (in ms) */ /* Get current time in ms adding a constant offset (in ms) */
#define A_GET_MS(offset) \ #define A_GET_MS(offset) \
(jiffies + ((offset) / 1000) * HZ) (((jiffies / HZ) * 1000) + (offset))
/* /*
* Timer Functions * Timer Functions
......
...@@ -122,7 +122,7 @@ wlan_setup_node(struct ieee80211_node_table *nt, bss_t *ni, ...@@ -122,7 +122,7 @@ wlan_setup_node(struct ieee80211_node_table *nt, bss_t *ni,
timeoutValue = nt->nt_nodeAge; 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; ni->ni_actcnt = WLAN_NODE_INACT_CNT;
IEEE80211_NODE_LOCK_BH(nt); IEEE80211_NODE_LOCK_BH(nt);
...@@ -360,7 +360,7 @@ wlan_refresh_inactive_nodes (struct ieee80211_node_table *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 (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 * free up all but the current bss - if set
...@@ -381,6 +381,7 @@ wlan_node_timeout (A_ATH_TIMER arg) ...@@ -381,6 +381,7 @@ wlan_node_timeout (A_ATH_TIMER arg)
bss_t *bss, *nextBss; bss_t *bss, *nextBss;
u8 myBssid[IEEE80211_ADDR_LEN], reArmTimer = false; u8 myBssid[IEEE80211_ADDR_LEN], reArmTimer = false;
u32 timeoutValue = 0; u32 timeoutValue = 0;
u32 now = A_GET_MS(0);
timeoutValue = nt->nt_nodeAge; timeoutValue = nt->nt_nodeAge;
...@@ -393,7 +394,7 @@ wlan_node_timeout (A_ATH_TIMER arg) ...@@ -393,7 +394,7 @@ wlan_node_timeout (A_ATH_TIMER arg)
if (A_MEMCMP(myBssid, bss->ni_macaddr, sizeof(myBssid)) != 0) 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 * free up all but the current bss - if set
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment