summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 0c9ef72291bb..441b2af4bda5 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -5144,6 +5144,25 @@ static int wl12xx_sta_remove(struct wl1271 *wl,
if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
return -EINVAL;
+ if (wl->links[id].ba_bitmap) {
+ u8 ba = wl->links[id].ba_bitmap;
+ u8 tid;
+
+ pr_info("WARNING: removing peer with active ba 0x%08x, count %u\n",
+ ba, wl->ba_rx_session_count);
+
+ for (tid = 0; tid < 8; tid++)
+ if (ba & BIT(tid))
+ wl12xx_acx_set_ba_receiver_session(wl, tid, 0,
+ false, id, 0);
+ if (wl->ba_rx_session_count >= hweight8(ba))
+ wl->ba_rx_session_count -= hweight8(ba);
+ else
+ wl->ba_rx_session_count = 0;
+
+ wl->links[id].ba_bitmap = 0;
+ }
+
ret = wl12xx_cmd_remove_peer(wl, wlvif, wl_sta->hlid);
if (ret < 0)
return ret;