mwifiex: fix bug in mwifiex_save_curr_bcn()
authorAmitkumar Karwar <akarwar@marvell.com>
Thu, 28 Apr 2011 02:13:13 +0000 (19:13 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 28 Apr 2011 18:53:23 +0000 (14:53 -0400)
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>
drivers/net/wireless/mwifiex/scan.c

index be708ad..31a5295 100644 (file)
@@ -2990,32 +2990,28 @@ mwifiex_save_curr_bcn(struct mwifiex_private *priv)
        struct mwifiex_bssdescriptor *curr_bss =
                &priv->curr_bss_params.bss_descriptor;
 
-       /* save the beacon buffer if it is not saved or updated */
-       if ((priv->curr_bcn_buf == NULL) ||
-           (priv->curr_bcn_size != curr_bss->beacon_buf_size) ||
-           (memcmp(priv->curr_bcn_buf, curr_bss->beacon_buf,
-                   curr_bss->beacon_buf_size))) {
-
-               kfree(priv->curr_bcn_buf);
-               priv->curr_bcn_buf = NULL;
+       if (!curr_bss->beacon_buf_size)
+               return;
 
+       /* allocate beacon buffer at 1st time; or if it's size has changed */
+       if (!priv->curr_bcn_buf ||
+                       priv->curr_bcn_size != curr_bss->beacon_buf_size) {
                priv->curr_bcn_size = curr_bss->beacon_buf_size;
-               if (!priv->curr_bcn_size)
-                       return;
 
+               kfree(priv->curr_bcn_buf);
                priv->curr_bcn_buf = kzalloc(curr_bss->beacon_buf_size,
                                                GFP_KERNEL);
                if (!priv->curr_bcn_buf) {
                        dev_err(priv->adapter->dev,
                                        "failed to alloc curr_bcn_buf\n");
-               } else {
-                       memcpy(priv->curr_bcn_buf, curr_bss->beacon_buf,
-                              curr_bss->beacon_buf_size);
-                       dev_dbg(priv->adapter->dev,
-                               "info: current beacon saved %d\n",
-                              priv->curr_bcn_size);
+                       return;
                }
        }
+
+       memcpy(priv->curr_bcn_buf, curr_bss->beacon_buf,
+               curr_bss->beacon_buf_size);
+       dev_dbg(priv->adapter->dev, "info: current beacon saved %d\n",
+               priv->curr_bcn_size);
 }
 
 /*