summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorVipin Mehta <vmehta@atheros.com>2011-02-18 13:13:16 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-18 13:28:53 -0800
commitd0e0086893de668db30f31b8ba407199a0f693d0 (patch)
tree31bb24eb6995e7a30a5dfb54c81f34b0a736fee1 /drivers/staging
parent28f7e85a4b454e4882a91ea13dd17cdf5013168d (diff)
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: Vipin Mehta <vmehta@atheros.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/ath6kl/os/linux/include/osapi_linux.h2
-rw-r--r--drivers/staging/ath6kl/wlan/src/wlan_node.c7
2 files changed, 5 insertions, 4 deletions
diff --git a/drivers/staging/ath6kl/os/linux/include/osapi_linux.h b/drivers/staging/ath6kl/os/linux/include/osapi_linux.h
index eb09d43f44e..1957de07b71 100644
--- a/drivers/staging/ath6kl/os/linux/include/osapi_linux.h
+++ b/drivers/staging/ath6kl/os/linux/include/osapi_linux.h
@@ -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
diff --git a/drivers/staging/ath6kl/wlan/src/wlan_node.c b/drivers/staging/ath6kl/wlan/src/wlan_node.c
index 996b36d01cc..d61cb6ea894 100644
--- a/drivers/staging/ath6kl/wlan/src/wlan_node.c
+++ b/drivers/staging/ath6kl/wlan/src/wlan_node.c
@@ -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