Commit 409622ec authored by Arik Nemtsov's avatar Arik Nemtsov Committed by Luciano Coelho

wl12xx: AP mode - fix bug in cleanup of wl1271_op_sta_add()

Remove an active hlid when chip wakeup fails. In addition rename the
involved functions.
Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent ba7c082a
...@@ -2624,7 +2624,7 @@ static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx, ...@@ -2624,7 +2624,7 @@ static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
return 0; return 0;
} }
static int wl1271_allocate_hlid(struct wl1271 *wl, static int wl1271_allocate_sta(struct wl1271 *wl,
struct ieee80211_sta *sta, struct ieee80211_sta *sta,
u8 *hlid) u8 *hlid)
{ {
...@@ -2645,10 +2645,13 @@ static int wl1271_allocate_hlid(struct wl1271 *wl, ...@@ -2645,10 +2645,13 @@ static int wl1271_allocate_hlid(struct wl1271 *wl,
return 0; return 0;
} }
static void wl1271_free_hlid(struct wl1271 *wl, u8 hlid) static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
{ {
int id = hlid - WL1271_AP_STA_HLID_START; int id = hlid - WL1271_AP_STA_HLID_START;
if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
return;
__clear_bit(id, wl->ap_hlid_map); __clear_bit(id, wl->ap_hlid_map);
wl1271_tx_reset_link_queues(wl, hlid); wl1271_tx_reset_link_queues(wl, hlid);
} }
...@@ -2671,13 +2674,13 @@ static int wl1271_op_sta_add(struct ieee80211_hw *hw, ...@@ -2671,13 +2674,13 @@ static int wl1271_op_sta_add(struct ieee80211_hw *hw,
wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid); wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
ret = wl1271_allocate_hlid(wl, sta, &hlid); ret = wl1271_allocate_sta(wl, sta, &hlid);
if (ret < 0) if (ret < 0)
goto out; goto out;
ret = wl1271_ps_elp_wakeup(wl, false); ret = wl1271_ps_elp_wakeup(wl, false);
if (ret < 0) if (ret < 0)
goto out; goto out_free_sta;
ret = wl1271_cmd_add_sta(wl, sta, hlid); ret = wl1271_cmd_add_sta(wl, sta, hlid);
if (ret < 0) if (ret < 0)
...@@ -2686,6 +2689,10 @@ static int wl1271_op_sta_add(struct ieee80211_hw *hw, ...@@ -2686,6 +2689,10 @@ static int wl1271_op_sta_add(struct ieee80211_hw *hw,
out_sleep: out_sleep:
wl1271_ps_elp_sleep(wl); wl1271_ps_elp_sleep(wl);
out_free_sta:
if (ret < 0)
wl1271_free_sta(wl, hlid);
out: out:
mutex_unlock(&wl->mutex); mutex_unlock(&wl->mutex);
return ret; return ret;
...@@ -2722,7 +2729,7 @@ static int wl1271_op_sta_remove(struct ieee80211_hw *hw, ...@@ -2722,7 +2729,7 @@ static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
if (ret < 0) if (ret < 0)
goto out_sleep; goto out_sleep;
wl1271_free_hlid(wl, wl_sta->hlid); wl1271_free_sta(wl, wl_sta->hlid);
out_sleep: out_sleep:
wl1271_ps_elp_sleep(wl); wl1271_ps_elp_sleep(wl);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment