diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2011-04-27 22:13:13 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-28 14:53:23 -0400 |
commit | 030fe7974f48bd86bb706ec05188ebab0cb7af80 (patch) | |
tree | cef6a9d5df5873454c3fde6d161f598b61a3cb61 /drivers/net/wireless/mwifiex/scan.c | |
parent | a46b7b5c13b9ecfe2b4e045e06aaec644dcf55d8 (diff) |
mwifiex: fix bug in mwifiex_save_curr_bcn()
Since timestamp in beacon buffer keeps changing all the time,
the memcmp check in mwifiex_save_curr_bcn() is redundant.
Remove that memcmp check and also avoid freeing and allocation
of buffer if required beacon buffer size is same as previous one.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/scan.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/scan.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c index be708ad8c44d..31a529578805 100644 --- a/drivers/net/wireless/mwifiex/scan.c +++ b/drivers/net/wireless/mwifiex/scan.c | |||
@@ -2990,32 +2990,28 @@ mwifiex_save_curr_bcn(struct mwifiex_private *priv) | |||
2990 | struct mwifiex_bssdescriptor *curr_bss = | 2990 | struct mwifiex_bssdescriptor *curr_bss = |
2991 | &priv->curr_bss_params.bss_descriptor; | 2991 | &priv->curr_bss_params.bss_descriptor; |
2992 | 2992 | ||
2993 | /* save the beacon buffer if it is not saved or updated */ | 2993 | if (!curr_bss->beacon_buf_size) |
2994 | if ((priv->curr_bcn_buf == NULL) || | 2994 | return; |
2995 | (priv->curr_bcn_size != curr_bss->beacon_buf_size) || | ||
2996 | (memcmp(priv->curr_bcn_buf, curr_bss->beacon_buf, | ||
2997 | curr_bss->beacon_buf_size))) { | ||
2998 | |||
2999 | kfree(priv->curr_bcn_buf); | ||
3000 | priv->curr_bcn_buf = NULL; | ||
3001 | 2995 | ||
2996 | /* allocate beacon buffer at 1st time; or if it's size has changed */ | ||
2997 | if (!priv->curr_bcn_buf || | ||
2998 | priv->curr_bcn_size != curr_bss->beacon_buf_size) { | ||
3002 | priv->curr_bcn_size = curr_bss->beacon_buf_size; | 2999 | priv->curr_bcn_size = curr_bss->beacon_buf_size; |
3003 | if (!priv->curr_bcn_size) | ||
3004 | return; | ||
3005 | 3000 | ||
3001 | kfree(priv->curr_bcn_buf); | ||
3006 | priv->curr_bcn_buf = kzalloc(curr_bss->beacon_buf_size, | 3002 | priv->curr_bcn_buf = kzalloc(curr_bss->beacon_buf_size, |
3007 | GFP_KERNEL); | 3003 | GFP_KERNEL); |
3008 | if (!priv->curr_bcn_buf) { | 3004 | if (!priv->curr_bcn_buf) { |
3009 | dev_err(priv->adapter->dev, | 3005 | dev_err(priv->adapter->dev, |
3010 | "failed to alloc curr_bcn_buf\n"); | 3006 | "failed to alloc curr_bcn_buf\n"); |
3011 | } else { | 3007 | return; |
3012 | memcpy(priv->curr_bcn_buf, curr_bss->beacon_buf, | ||
3013 | curr_bss->beacon_buf_size); | ||
3014 | dev_dbg(priv->adapter->dev, | ||
3015 | "info: current beacon saved %d\n", | ||
3016 | priv->curr_bcn_size); | ||
3017 | } | 3008 | } |
3018 | } | 3009 | } |
3010 | |||
3011 | memcpy(priv->curr_bcn_buf, curr_bss->beacon_buf, | ||
3012 | curr_bss->beacon_buf_size); | ||
3013 | dev_dbg(priv->adapter->dev, "info: current beacon saved %d\n", | ||
3014 | priv->curr_bcn_size); | ||
3019 | } | 3015 | } |
3020 | 3016 | ||
3021 | /* | 3017 | /* |