mwifiex: use atomic bitops to represent adapter status variables
authorGanapathi Bhat <gbhat@marvell.com>
Fri, 13 Jul 2018 12:26:35 +0000 (17:56 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 31 Jul 2018 07:12:56 +0000 (10:12 +0300)
Driver is using boolean variables to maintain vairous status
information of adapter. These status variables are accessed by
multiple threads and there is a possibility of a race. To avoid
this, convert these variables to a set of bitops flags, to be
operated atomically.

Below variables of mwifiex_adapter are converted to bitop flags:
surprise_removed
is_cmd_timedout
is_suspended
is_hs_configured
hs_enabling

Signed-off-by: Ganapathi Bhat <gbhat@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 files changed:
drivers/net/wireless/marvell/mwifiex/cfg80211.c
drivers/net/wireless/marvell/mwifiex/cmdevt.c
drivers/net/wireless/marvell/mwifiex/debugfs.c
drivers/net/wireless/marvell/mwifiex/init.c
drivers/net/wireless/marvell/mwifiex/main.c
drivers/net/wireless/marvell/mwifiex/main.h
drivers/net/wireless/marvell/mwifiex/pcie.c
drivers/net/wireless/marvell/mwifiex/scan.c
drivers/net/wireless/marvell/mwifiex/sdio.c
drivers/net/wireless/marvell/mwifiex/sta_event.c
drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
drivers/net/wireless/marvell/mwifiex/sta_tx.c
drivers/net/wireless/marvell/mwifiex/usb.c
drivers/net/wireless/marvell/mwifiex/util.c
drivers/net/wireless/marvell/mwifiex/wmm.c

index c02e02c..adc8843 100644 (file)
@@ -2322,7 +2322,8 @@ mwifiex_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
        if (priv->scan_block)
                priv->scan_block = false;
 
-       if (adapter->surprise_removed || adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags) ||
+           test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: Ignore connection.\t"
                            "Card removed or FW in bad state\n",
index 9cfcdf6..60db2b9 100644 (file)
@@ -372,7 +372,7 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
                adapter->ps_state = PS_STATE_SLEEP_CFM;
 
        if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl) &&
-           (adapter->is_hs_configured &&
+           (test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags) &&
             !adapter->sleep_period.period)) {
                adapter->pm_wakeup_card_req = true;
                mwifiex_hs_activated_event(mwifiex_get_priv
@@ -564,25 +564,26 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no,
                return -1;
        }
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: device in suspended state\n");
                return -1;
        }
 
-       if (adapter->hs_enabling && cmd_no != HostCmd_CMD_802_11_HS_CFG_ENH) {
+       if (test_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags) &&
+           cmd_no != HostCmd_CMD_802_11_HS_CFG_ENH) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: host entering sleep state\n");
                return -1;
        }
 
-       if (adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: card is removed\n");
                return -1;
        }
 
-       if (adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "PREP_CMD: FW is in bad state\n");
                return -1;
@@ -789,7 +790,8 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
        if (priv && (host_cmd->command !=
             cpu_to_le16(HostCmd_CMD_802_11_HS_CFG_ENH))) {
                if (adapter->hs_activated) {
-                       adapter->is_hs_configured = false;
+                       clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                 &adapter->work_flags);
                        mwifiex_hs_activated_event(priv, false);
                }
        }
@@ -825,7 +827,7 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
                return -1;
        }
 
-       adapter->is_cmd_timedout = 0;
+       clear_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
 
        resp = (struct host_cmd_ds_command *) adapter->curr_cmd->resp_skb->data;
        if (adapter->curr_cmd->cmd_flag & CMD_F_HOSTCMD) {
@@ -927,7 +929,7 @@ mwifiex_cmd_timeout_func(struct timer_list *t)
        struct mwifiex_adapter *adapter = from_timer(adapter, t, cmd_timer);
        struct cmd_ctrl_node *cmd_node;
 
-       adapter->is_cmd_timedout = 1;
+       set_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
        if (!adapter->curr_cmd) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: empty curr_cmd\n");
@@ -953,7 +955,8 @@ mwifiex_cmd_timeout_func(struct timer_list *t)
 
                mwifiex_dbg(adapter, MSG,
                            "is_cmd_timedout = %d\n",
-                           adapter->is_cmd_timedout);
+                           test_bit(MWIFIEX_IS_CMD_TIMEDOUT,
+                                    &adapter->work_flags));
                mwifiex_dbg(adapter, MSG,
                            "num_tx_timeout = %d\n",
                            adapter->dbg.num_tx_timeout);
@@ -1135,7 +1138,8 @@ void
 mwifiex_hs_activated_event(struct mwifiex_private *priv, u8 activated)
 {
        if (activated) {
-               if (priv->adapter->is_hs_configured) {
+               if (test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                            &priv->adapter->work_flags)) {
                        priv->adapter->hs_activated = true;
                        mwifiex_update_rxreor_flags(priv->adapter,
                                                    RXREOR_FORCE_NO_DROP);
@@ -1186,11 +1190,11 @@ int mwifiex_ret_802_11_hs_cfg(struct mwifiex_private *priv,
                            phs_cfg->params.hs_config.gap);
        }
        if (conditions != HS_CFG_CANCEL) {
-               adapter->is_hs_configured = true;
+               set_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
                if (adapter->iface_type == MWIFIEX_USB)
                        mwifiex_hs_activated_event(priv, true);
        } else {
-               adapter->is_hs_configured = false;
+               clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
                if (adapter->hs_activated)
                        mwifiex_hs_activated_event(priv, false);
        }
@@ -1212,8 +1216,8 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter)
 
        adapter->if_ops.wakeup(adapter);
        adapter->hs_activated = false;
-       adapter->is_hs_configured = false;
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        mwifiex_hs_activated_event(mwifiex_get_priv(adapter,
                                                    MWIFIEX_BSS_ROLE_ANY),
                                   false);
@@ -1273,7 +1277,7 @@ mwifiex_process_sleep_confirm_resp(struct mwifiex_adapter *adapter,
                return;
        }
        adapter->pm_wakeup_card_req = true;
-       if (adapter->is_hs_configured)
+       if (test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags))
                mwifiex_hs_activated_event(mwifiex_get_priv
                                                (adapter, MWIFIEX_BSS_ROLE_ANY),
                                           true);
index 0745393..cce7025 100644 (file)
@@ -813,7 +813,7 @@ mwifiex_hscfg_write(struct file *file, const char __user *ubuf,
                              MWIFIEX_SYNC_CMD, &hscfg);
 
        mwifiex_enable_hs(priv->adapter);
-       priv->adapter->hs_enabling = false;
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &priv->adapter->work_flags);
        ret = count;
 done:
        kfree(buf);
index dab02d7..673e89d 100644 (file)
@@ -233,7 +233,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter)
        adapter->event_received = false;
        adapter->data_received = false;
 
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
 
@@ -270,7 +270,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter)
 
        adapter->curr_tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
 
-       adapter->is_hs_configured = false;
+       clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
        adapter->hs_cfg.conditions = cpu_to_le32(HS_CFG_COND_DEF);
        adapter->hs_cfg.gpio = HS_CFG_GPIO_DEF;
        adapter->hs_cfg.gap = HS_CFG_GAP_DEF;
index fa3e8dd..20cee5c 100644 (file)
@@ -404,7 +404,8 @@ process_start:
                    !skb_queue_empty(&adapter->tx_data_q)) {
                        mwifiex_process_tx_queue(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                        (adapter, MWIFIEX_BSS_ROLE_ANY),
@@ -420,7 +421,8 @@ process_start:
                        (mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA))) {
                        mwifiex_process_bypass_tx(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                         (adapter, MWIFIEX_BSS_ROLE_ANY),
@@ -435,7 +437,8 @@ process_start:
                        (mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA))) {
                        mwifiex_wmm_process_tx(adapter);
                        if (adapter->hs_activated) {
-                               adapter->is_hs_configured = false;
+                               clear_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
                                mwifiex_hs_activated_event
                                        (mwifiex_get_priv
                                         (adapter, MWIFIEX_BSS_ROLE_ANY),
@@ -647,7 +650,7 @@ err_dnld_fw:
        if (adapter->if_ops.unregister_dev)
                adapter->if_ops.unregister_dev(adapter);
 
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
 
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
@@ -870,7 +873,7 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
                    "data: %lu BSS(%d-%d): Data <= kernel\n",
                    jiffies, priv->bss_type, priv->bss_num);
 
-       if (priv->adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &priv->adapter->work_flags)) {
                kfree_skb(skb);
                priv->stats.tx_dropped++;
                return 0;
@@ -1372,7 +1375,7 @@ static void mwifiex_rx_work_queue(struct work_struct *work)
        struct mwifiex_adapter *adapter =
                container_of(work, struct mwifiex_adapter, rx_work);
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return;
        mwifiex_process_rx(adapter);
 }
@@ -1388,7 +1391,7 @@ static void mwifiex_main_work_queue(struct work_struct *work)
        struct mwifiex_adapter *adapter =
                container_of(work, struct mwifiex_adapter, main_work);
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return;
        mwifiex_main_process(adapter);
 }
@@ -1405,7 +1408,7 @@ static void mwifiex_uninit_sw(struct mwifiex_adapter *adapter)
        if (adapter->if_ops.disable_int)
                adapter->if_ops.disable_int(adapter);
 
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        adapter->int_status = 0;
 
@@ -1493,11 +1496,11 @@ mwifiex_reinit_sw(struct mwifiex_adapter *adapter)
                adapter->if_ops.up_dev(adapter);
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        init_waitqueue_head(&adapter->init_wait_q);
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        adapter->hs_activated = false;
-       adapter->is_cmd_timedout = 0;
+       clear_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
        init_waitqueue_head(&adapter->hs_activate_wait_q);
        init_waitqueue_head(&adapter->cmd_wait_q.wait);
        adapter->cmd_wait_q.status = 0;
@@ -1552,7 +1555,7 @@ err_init_fw:
                adapter->if_ops.unregister_dev(adapter);
 
 err_kmalloc:
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
                mwifiex_dbg(adapter, ERROR,
@@ -1649,9 +1652,9 @@ mwifiex_add_card(void *card, struct completion *fw_done,
        adapter->fw_done = fw_done;
 
        adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
-       adapter->surprise_removed = false;
+       clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        init_waitqueue_head(&adapter->init_wait_q);
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
        adapter->hs_activated = false;
        init_waitqueue_head(&adapter->hs_activate_wait_q);
        init_waitqueue_head(&adapter->cmd_wait_q.wait);
@@ -1699,7 +1702,7 @@ err_init_fw:
        if (adapter->if_ops.unregister_dev)
                adapter->if_ops.unregister_dev(adapter);
 err_registerdev:
-       adapter->surprise_removed = true;
+       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
        mwifiex_terminate_workqueue(adapter);
        if (adapter->hw_status == MWIFIEX_HW_STATUS_READY) {
                pr_debug("info: %s: shutdown mwifiex\n", __func__);
index d2b54be..b025ba1 100644 (file)
@@ -517,6 +517,14 @@ enum mwifiex_iface_work_flags {
        MWIFIEX_IFACE_WORK_CARD_RESET,
 };
 
+enum mwifiex_adapter_work_flags {
+       MWIFIEX_SURPRISE_REMOVED,
+       MWIFIEX_IS_CMD_TIMEDOUT,
+       MWIFIEX_IS_SUSPENDED,
+       MWIFIEX_IS_HS_CONFIGURED,
+       MWIFIEX_IS_HS_ENABLING,
+};
+
 struct mwifiex_band_config {
        u8 chan_band:2;
        u8 chan_width:2;
@@ -872,7 +880,7 @@ struct mwifiex_adapter {
        struct device *dev;
        struct wiphy *wiphy;
        u8 perm_addr[ETH_ALEN];
-       bool surprise_removed;
+       unsigned long work_flags;
        u32 fw_release_number;
        u8 intf_hdr_len;
        u16 init_wait_q_woken;
@@ -926,7 +934,6 @@ struct mwifiex_adapter {
        struct cmd_ctrl_node *curr_cmd;
        /* spin lock for command */
        spinlock_t mwifiex_cmd_lock;
-       u8 is_cmd_timedout;
        u16 last_init_cmd;
        struct timer_list cmd_timer;
        struct list_head cmd_free_q;
@@ -976,13 +983,10 @@ struct mwifiex_adapter {
        u16 pps_uapsd_mode;
        u32 pm_wakeup_fw_try;
        struct timer_list wakeup_timer;
-       u8 is_hs_configured;
        struct mwifiex_hs_config_param hs_cfg;
        u8 hs_activated;
        u16 hs_activate_wait_q_woken;
        wait_queue_head_t hs_activate_wait_q;
-       bool is_suspended;
-       bool hs_enabling;
        u8 event_body[MAX_EVENT_SIZE];
        u32 hw_dot_11n_dev_cap;
        u8 hw_dev_mcs_support;
index 0c42b72..3fe81b2 100644 (file)
@@ -170,7 +170,7 @@ static int mwifiex_pcie_suspend(struct device *dev)
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                mwifiex_disable_wake(adapter);
                return -EFAULT;
        }
@@ -178,8 +178,8 @@ static int mwifiex_pcie_suspend(struct device *dev)
        flush_workqueue(adapter->workqueue);
 
        /* Indicate device suspended */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        return 0;
 }
@@ -207,13 +207,13 @@ static int mwifiex_pcie_resume(struct device *dev)
 
        adapter = card->adapter;
 
-       if (!adapter->is_suspended) {
+       if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, WARN,
                            "Device already resumed\n");
                return 0;
        }
 
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
                          MWIFIEX_ASYNC_CMD);
@@ -2430,7 +2430,7 @@ static irqreturn_t mwifiex_pcie_interrupt(int irq, void *context)
        }
        adapter = card->adapter;
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                goto exit;
 
        if (card->msix_enable)
index 895b806..8e483b0 100644 (file)
@@ -1495,7 +1495,8 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
                return -EBUSY;
        }
 
-       if (adapter->surprise_removed || adapter->is_cmd_timedout) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags) ||
+           test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "Ignore scan. Card removed or firmware in bad state\n");
                return -EFAULT;
index dfdcbc4..d49fbd5 100644 (file)
@@ -181,13 +181,13 @@ static int mwifiex_sdio_resume(struct device *dev)
 
        adapter = card->adapter;
 
-       if (!adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, WARN,
                            "device already resumed\n");
                return 0;
        }
 
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        /* Disable Host Sleep */
        mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
@@ -260,7 +260,7 @@ mwifiex_write_data_sync(struct mwifiex_adapter *adapter,
                                MWIFIEX_SDIO_BLOCK_SIZE) : pkt_len;
        u32 ioport = (port & MWIFIEX_SDIO_IO_PORT_MASK);
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: not allowed while suspended\n", __func__);
                return -1;
@@ -450,7 +450,7 @@ static int mwifiex_sdio_suspend(struct device *dev)
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                mwifiex_disable_wake(adapter);
                return -EFAULT;
        }
@@ -460,8 +460,8 @@ static int mwifiex_sdio_suspend(struct device *dev)
        ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
 
        /* Indicate device suspended */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        return ret;
 }
index 03a6492..a327fc5 100644 (file)
@@ -224,7 +224,8 @@ void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code,
        adapter->tx_lock_flag = false;
        adapter->pps_uapsd_mode = false;
 
-       if (adapter->is_cmd_timedout && adapter->curr_cmd)
+       if (test_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags) &&
+           adapter->curr_cmd)
                return;
        priv->media_connected = false;
        mwifiex_dbg(adapter, MSG,
index 5414b75..b454b5f 100644 (file)
@@ -419,7 +419,8 @@ int mwifiex_set_hs_params(struct mwifiex_private *priv, u16 action,
                }
                if (hs_cfg->is_invoke_hostcmd) {
                        if (hs_cfg->conditions == HS_CFG_CANCEL) {
-                               if (!adapter->is_hs_configured)
+                               if (!test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                             &adapter->work_flags))
                                        /* Already cancelled */
                                        break;
                                /* Save previous condition */
@@ -535,7 +536,7 @@ int mwifiex_enable_hs(struct mwifiex_adapter *adapter)
        memset(&hscfg, 0, sizeof(hscfg));
        hscfg.is_invoke_hostcmd = true;
 
-       adapter->hs_enabling = true;
+       set_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
        mwifiex_cancel_all_pending_cmd(adapter);
 
        if (mwifiex_set_hs_params(mwifiex_get_priv(adapter,
@@ -601,7 +602,8 @@ int mwifiex_get_bss_info(struct mwifiex_private *priv,
        else
                info->wep_status = false;
 
-       info->is_hs_configured = adapter->is_hs_configured;
+       info->is_hs_configured = test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                         &adapter->work_flags);
        info->is_deep_sleep = adapter->is_deep_sleep;
 
        return 0;
index 620f865..37c24b9 100644 (file)
@@ -143,7 +143,7 @@ int mwifiex_send_null_packet(struct mwifiex_private *priv, u8 flags)
        int ret;
        struct mwifiex_txinfo *tx_info = NULL;
 
-       if (adapter->surprise_removed)
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags))
                return -1;
 
        if (!priv->media_connected)
index 88f4c89..433c6a1 100644 (file)
@@ -181,7 +181,8 @@ static void mwifiex_usb_rx_complete(struct urb *urb)
                atomic_dec(&card->rx_data_urb_pending);
 
        if (recv_length) {
-               if (urb->status || (adapter->surprise_removed)) {
+               if (urb->status ||
+                   test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                        mwifiex_dbg(adapter, ERROR,
                                    "URB status is failed: %d\n", urb->status);
                        /* Do not free skb in case of command ep */
@@ -218,10 +219,10 @@ static void mwifiex_usb_rx_complete(struct urb *urb)
                                dev_kfree_skb_any(skb);
                }
        } else if (urb->status) {
-               if (!adapter->is_suspended) {
+               if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                        mwifiex_dbg(adapter, FATAL,
                                    "Card is removed: %d\n", urb->status);
-                       adapter->surprise_removed = true;
+                       set_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
                }
                dev_kfree_skb_any(skb);
                return;
@@ -529,7 +530,7 @@ static int mwifiex_usb_suspend(struct usb_interface *intf, pm_message_t message)
                return 0;
        }
 
-       if (unlikely(adapter->is_suspended))
+       if (unlikely(test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)))
                mwifiex_dbg(adapter, WARN,
                            "Device already suspended\n");
 
@@ -537,19 +538,19 @@ static int mwifiex_usb_suspend(struct usb_interface *intf, pm_message_t message)
        if (!mwifiex_enable_hs(adapter)) {
                mwifiex_dbg(adapter, ERROR,
                            "cmd: failed to suspend\n");
-               adapter->hs_enabling = false;
+               clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
                return -EFAULT;
        }
 
 
-       /* 'is_suspended' flag indicates device is suspended.
+       /* 'MWIFIEX_IS_SUSPENDED' bit indicates device is suspended.
         * It must be set here before the usb_kill_urb() calls. Reason
         * is in the complete handlers, urb->status(= -ENOENT) and
         * this flag is used in combination to distinguish between a
         * 'suspended' state and a 'disconnect' one.
         */
-       adapter->is_suspended = true;
-       adapter->hs_enabling = false;
+       set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
+       clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags);
 
        if (atomic_read(&card->rx_cmd_urb_pending) && card->rx_cmd.urb)
                usb_kill_urb(card->rx_cmd.urb);
@@ -593,7 +594,7 @@ static int mwifiex_usb_resume(struct usb_interface *intf)
        }
        adapter = card->adapter;
 
-       if (unlikely(!adapter->is_suspended)) {
+       if (unlikely(!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags))) {
                mwifiex_dbg(adapter, WARN,
                            "Device already resumed\n");
                return 0;
@@ -602,7 +603,7 @@ static int mwifiex_usb_resume(struct usb_interface *intf)
        /* Indicate device resumed. The netdev queue will be resumed only
         * after the urbs have been re-submitted
         */
-       adapter->is_suspended = false;
+       clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
 
        if (!atomic_read(&card->rx_data_urb_pending))
                for (i = 0; i < MWIFIEX_RX_DATA_URB; i++)
@@ -1158,13 +1159,13 @@ static int mwifiex_usb_host_to_card(struct mwifiex_adapter *adapter, u8 ep,
        unsigned long flags;
        int idx, ret;
 
-       if (adapter->is_suspended) {
+       if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR,
                            "%s: not allowed while suspended\n", __func__);
                return -1;
        }
 
-       if (adapter->surprise_removed) {
+       if (test_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags)) {
                mwifiex_dbg(adapter, ERROR, "%s: device removed\n", __func__);
                return -1;
        }
index 6dd2128..f9b7153 100644 (file)
@@ -197,9 +197,11 @@ int mwifiex_get_debug_info(struct mwifiex_private *priv,
                info->is_deep_sleep = adapter->is_deep_sleep;
                info->pm_wakeup_card_req = adapter->pm_wakeup_card_req;
                info->pm_wakeup_fw_try = adapter->pm_wakeup_fw_try;
-               info->is_hs_configured = adapter->is_hs_configured;
+               info->is_hs_configured = test_bit(MWIFIEX_IS_HS_CONFIGURED,
+                                                 &adapter->work_flags);
                info->hs_activated = adapter->hs_activated;
-               info->is_cmd_timedout = adapter->is_cmd_timedout;
+               info->is_cmd_timedout = test_bit(MWIFIEX_IS_CMD_TIMEDOUT,
+                                                &adapter->work_flags);
                info->num_cmd_host_to_card_failure
                                = adapter->dbg.num_cmd_host_to_card_failure;
                info->num_cmd_sleep_cfm_host_to_card_failure
index 936a0a8..407b993 100644 (file)
@@ -599,7 +599,7 @@ mwifiex_clean_txrx(struct mwifiex_private *priv)
        memcpy(tos_to_tid, ac_to_tid, sizeof(tos_to_tid));
 
        if (priv->adapter->if_ops.clean_pcie_ring &&
-           !priv->adapter->surprise_removed)
+           !test_bit(MWIFIEX_SURPRISE_REMOVED, &priv->adapter->work_flags))
                priv->adapter->if_ops.clean_pcie_ring(priv->adapter);
        spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags);