diff options
| author | Avinash Patil <patila@marvell.com> | 2013-10-11 21:31:31 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2013-10-14 13:24:25 -0400 |
| commit | e8041ceeded8a0f68cc0c75faf911e4369bba89f (patch) | |
| tree | 6de96986d03a2356a54d38c1f15166c341ef5d7a | |
| parent | 4db89e149cde12f9390bfe90807cf4c5de74fcde (diff) | |
mwifiex: inform cfg80211 about disconnect if device is removed
If device is surprise removed, commands sent to FW including
deauthenticate command fail as bus writes fail.
We update our media_connected status to false and inform cfg80211
about disconnection only when command is successful. Since cfg80211
assumes device is still connected, it results into following
WARN_ON during unload:
WARNING: CPU: 0 PID: 18245 at net/wireless/core.c:937
cfg80211_netdev_notifier_call+0x175/0x4d0 [cfg80211]()
Avoid this by emitting cfg80211_disconnected event even if the
deauthenticate command fails.
Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
| -rw-r--r-- | drivers/net/wireless/mwifiex/join.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c index 9d7c0e6c4fc7..37f873bb342f 100644 --- a/drivers/net/wireless/mwifiex/join.c +++ b/drivers/net/wireless/mwifiex/join.c | |||
| @@ -1422,13 +1422,19 @@ static int mwifiex_deauthenticate_infra(struct mwifiex_private *priv, u8 *mac) | |||
| 1422 | */ | 1422 | */ |
| 1423 | int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac) | 1423 | int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac) |
| 1424 | { | 1424 | { |
| 1425 | int ret = 0; | ||
| 1426 | |||
| 1425 | if (!priv->media_connected) | 1427 | if (!priv->media_connected) |
| 1426 | return 0; | 1428 | return 0; |
| 1427 | 1429 | ||
| 1428 | switch (priv->bss_mode) { | 1430 | switch (priv->bss_mode) { |
| 1429 | case NL80211_IFTYPE_STATION: | 1431 | case NL80211_IFTYPE_STATION: |
| 1430 | case NL80211_IFTYPE_P2P_CLIENT: | 1432 | case NL80211_IFTYPE_P2P_CLIENT: |
| 1431 | return mwifiex_deauthenticate_infra(priv, mac); | 1433 | ret = mwifiex_deauthenticate_infra(priv, mac); |
| 1434 | if (ret) | ||
| 1435 | cfg80211_disconnected(priv->netdev, 0, NULL, 0, | ||
| 1436 | GFP_KERNEL); | ||
| 1437 | break; | ||
| 1432 | case NL80211_IFTYPE_ADHOC: | 1438 | case NL80211_IFTYPE_ADHOC: |
| 1433 | return mwifiex_send_cmd_sync(priv, | 1439 | return mwifiex_send_cmd_sync(priv, |
| 1434 | HostCmd_CMD_802_11_AD_HOC_STOP, | 1440 | HostCmd_CMD_802_11_AD_HOC_STOP, |
| @@ -1440,7 +1446,7 @@ int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac) | |||
| 1440 | break; | 1446 | break; |
| 1441 | } | 1447 | } |
| 1442 | 1448 | ||
| 1443 | return 0; | 1449 | return ret; |
| 1444 | } | 1450 | } |
| 1445 | EXPORT_SYMBOL_GPL(mwifiex_deauthenticate); | 1451 | EXPORT_SYMBOL_GPL(mwifiex_deauthenticate); |
| 1446 | 1452 | ||
