summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-07-21 20:15:28 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-07-21 20:15:27 -0700
commit2b487d260335ff6966d11aeee492bf5f6ad35250 (patch)
tree4f952158f2eb1f1a2c4d91b3b034b427e200b4be /drivers/net
parent61f5287f13d108121696330a69a9e57b4b089bdc (diff)
parentf056b1e5288c4bfe6602c3b6a098696597a16e38 (diff)
Merge "ath10k: wait for peer delete resp after every peer delete"
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index c0bd0f2bfa20..cce931e51d7e 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -667,6 +667,36 @@ ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
*def = &conf->def;
}
+static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
+{
+ int ret;
+ unsigned long time_left;
+
+ lockdep_assert_held(&ar->conf_mutex);
+
+ ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
+ if (ret)
+ return ret;
+
+ ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
+ if (ret)
+ return ret;
+
+ if (QCA_REV_WCN3990(ar)) {
+ time_left = wait_for_completion_timeout(&ar->peer_delete_done,
+ 50 * HZ);
+
+ if (time_left == 0) {
+ ath10k_warn(ar, "Timeout in receiving peer delete response\n");
+ return -ETIMEDOUT;
+ }
+ }
+
+ ar->num_peers--;
+
+ return 0;
+}
+
static int ath10k_peer_create(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
@@ -711,7 +741,7 @@ static int ath10k_peer_create(struct ath10k *ar,
spin_unlock_bh(&ar->data_lock);
ath10k_warn(ar, "failed to find peer %pM on vdev %i after creation\n",
addr, vdev_id);
- ath10k_wmi_peer_delete(ar, vdev_id, addr);
+ ath10k_peer_delete(ar, vdev_id, addr);
return -ENOENT;
}
@@ -779,36 +809,6 @@ static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
}
-static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
-{
- int ret;
- unsigned long time_left;
-
- lockdep_assert_held(&ar->conf_mutex);
-
- ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
- if (ret)
- return ret;
-
- ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
- if (ret)
- return ret;
-
- if (QCA_REV_WCN3990(ar)) {
- time_left = wait_for_completion_timeout(&ar->peer_delete_done,
- 50 * HZ);
-
- if (time_left == 0) {
- ath10k_warn(ar, "Timeout in receiving peer delete response\n");
- return -ETIMEDOUT;
- }
- }
-
- ar->num_peers--;
-
- return 0;
-}
-
static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
{
struct ath10k_peer *peer, *tmp;
@@ -5094,7 +5094,7 @@ static int ath10k_add_interface(struct ieee80211_hw *hw,
err_peer_delete:
if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
- ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
+ ath10k_peer_delete(ar, arvif->vdev_id, vif->addr);
err_vdev_delete:
ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
@@ -5150,8 +5150,8 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw,
if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
- ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
- vif->addr);
+ ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id,
+ vif->addr);
if (ret)
ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
arvif->vdev_id, ret);