Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[linux-2.6-microblaze.git] / drivers / net / wireless / mwifiex / scan.c
index f139244..7b3af3d 100644 (file)
@@ -591,10 +591,12 @@ mwifiex_scan_channel_list(struct mwifiex_private *priv,
                          *chan_tlv_out,
                          struct mwifiex_chan_scan_param_set *scan_chan_list)
 {
+       struct mwifiex_adapter *adapter = priv->adapter;
        int ret = 0;
        struct mwifiex_chan_scan_param_set *tmp_chan_list;
        struct mwifiex_chan_scan_param_set *start_chan;
-
+       struct cmd_ctrl_node *cmd_node, *tmp_node;
+       unsigned long flags;
        u32 tlv_idx, rates_size, cmd_no;
        u32 total_scan_time;
        u32 done_early;
@@ -748,8 +750,19 @@ mwifiex_scan_channel_list(struct mwifiex_private *priv,
                scan_cfg_out->tlv_buf_len -=
                            sizeof(struct mwifiex_ie_types_header) + rates_size;
 
-               if (ret)
+               if (ret) {
+                       spin_lock_irqsave(&adapter->scan_pending_q_lock, flags);
+                       list_for_each_entry_safe(cmd_node, tmp_node,
+                                                &adapter->scan_pending_q,
+                                                list) {
+                               list_del(&cmd_node->list);
+                               cmd_node->wait_q_enabled = false;
+                               mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
+                       }
+                       spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
+                                              flags);
                        break;
+               }
        }
 
        if (ret)
@@ -1653,7 +1666,7 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info,
        curr_bcn_bytes -= ETH_ALEN;
 
        if (!ext_scan) {
-               rssi = (s32) *(u8 *)current_ptr;
+               rssi = (s32) *current_ptr;
                rssi = (-rssi) * 100;           /* Convert dBm to mBm */
                current_ptr += sizeof(u8);
                curr_bcn_bytes -= sizeof(u8);