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: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
ba7c082a13
commit
409622ecc2
1 changed files with 12 additions and 5 deletions
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue