mirror of
https://github.com/torvalds/linux
synced 2024-09-26 22:38:50 +00:00
mwifiex: return -EBUSY if scan request cannot be honored
There are cases we cannot scan when request is received. For example, during WPA group key negociation the scan request will be blocked. We should return an error code to cfg80211 because cfg80211_scan_done will never be called. Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Paul Stewart <pstew@chromium.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
55fabefe36
commit
c247633531
|
@ -1802,7 +1802,7 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
|
||||||
{
|
{
|
||||||
struct net_device *dev = request->wdev->netdev;
|
struct net_device *dev = request->wdev->netdev;
|
||||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||||
int i, offset;
|
int i, offset, ret;
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
struct ieee_types_header *ie;
|
struct ieee_types_header *ie;
|
||||||
|
|
||||||
|
@ -1855,8 +1855,12 @@ mwifiex_cfg80211_scan(struct wiphy *wiphy,
|
||||||
|
|
||||||
priv->user_scan_cfg->chan_list[i].scan_time = 0;
|
priv->user_scan_cfg->chan_list[i].scan_time = 0;
|
||||||
}
|
}
|
||||||
if (mwifiex_scan_networks(priv, priv->user_scan_cfg))
|
|
||||||
return -EFAULT;
|
ret = mwifiex_scan_networks(priv, priv->user_scan_cfg);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(priv->adapter->dev, "scan failed: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (request->ie && request->ie_len) {
|
if (request->ie && request->ie_len) {
|
||||||
for (i = 0; i < MWIFIEX_MAX_VSIE_NUM; i++) {
|
for (i = 0; i < MWIFIEX_MAX_VSIE_NUM; i++) {
|
||||||
|
|
|
@ -1296,7 +1296,7 @@ mwifiex_radio_type_to_band(u8 radio_type)
|
||||||
int mwifiex_scan_networks(struct mwifiex_private *priv,
|
int mwifiex_scan_networks(struct mwifiex_private *priv,
|
||||||
const struct mwifiex_user_scan_cfg *user_scan_in)
|
const struct mwifiex_user_scan_cfg *user_scan_in)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret;
|
||||||
struct mwifiex_adapter *adapter = priv->adapter;
|
struct mwifiex_adapter *adapter = priv->adapter;
|
||||||
struct cmd_ctrl_node *cmd_node;
|
struct cmd_ctrl_node *cmd_node;
|
||||||
union mwifiex_scan_cmd_config_tlv *scan_cfg_out;
|
union mwifiex_scan_cmd_config_tlv *scan_cfg_out;
|
||||||
|
@ -1309,20 +1309,20 @@ int mwifiex_scan_networks(struct mwifiex_private *priv,
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (adapter->scan_processing) {
|
if (adapter->scan_processing) {
|
||||||
dev_dbg(adapter->dev, "cmd: Scan already in process...\n");
|
dev_err(adapter->dev, "cmd: Scan already in process...\n");
|
||||||
return ret;
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->scan_block) {
|
||||||
|
dev_err(adapter->dev,
|
||||||
|
"cmd: Scan is blocked during association...\n");
|
||||||
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags);
|
spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags);
|
||||||
adapter->scan_processing = true;
|
adapter->scan_processing = true;
|
||||||
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags);
|
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags);
|
||||||
|
|
||||||
if (priv->scan_block) {
|
|
||||||
dev_dbg(adapter->dev,
|
|
||||||
"cmd: Scan is blocked during association...\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv),
|
scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!scan_cfg_out) {
|
if (!scan_cfg_out) {
|
||||||
|
|
Loading…
Reference in a new issue