mwifiex: remove global variable cmd_wait_q_required
There is a race condition while queuing synchronous command and asynchronous command requested from different threads, because the wait_q_enabled flag is set based on a global variable cmd_wait_q_required. The issue is fixed by removing this global variable and using a unified function with an argument 'sync' passed into the function. Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
6b7dce12b3
commit
fa0ecbb990
@@ -678,8 +678,8 @@ mwifiex_set_mac_address(struct net_device *dev, void *addr)
|
||||
memcpy(priv->curr_addr, hw_addr->sa_data, ETH_ALEN);
|
||||
|
||||
/* Send request to firmware */
|
||||
ret = mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_MAC_ADDRESS,
|
||||
HostCmd_ACT_GEN_SET, 0, NULL);
|
||||
ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_MAC_ADDRESS,
|
||||
HostCmd_ACT_GEN_SET, 0, NULL, true);
|
||||
|
||||
if (!ret)
|
||||
memcpy(priv->netdev->dev_addr, priv->curr_addr, ETH_ALEN);
|
||||
@@ -871,7 +871,6 @@ mwifiex_add_card(void *card, struct semaphore *sem,
|
||||
adapter->is_suspended = false;
|
||||
adapter->hs_activated = false;
|
||||
init_waitqueue_head(&adapter->hs_activate_wait_q);
|
||||
adapter->cmd_wait_q_required = false;
|
||||
init_waitqueue_head(&adapter->cmd_wait_q.wait);
|
||||
adapter->cmd_wait_q.status = 0;
|
||||
adapter->scan_wait_q_woken = false;
|
||||
|
Reference in New Issue
Block a user