Commit 41ed1a78 authored by Eliad Peller's avatar Eliad Peller Committed by John W. Linville

wlcore: consider multiple APs when checking active_link_count

Each AP has its own global and broadcast links, so when
checking for active sta count (according to the active_link_count)
we must take them all into account.
Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent bf4e5f1a
...@@ -345,12 +345,12 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl, ...@@ -345,12 +345,12 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
* Start high-level PS if the STA is asleep with enough blocks in FW. * Start high-level PS if the STA is asleep with enough blocks in FW.
* Make an exception if this is the only connected link. In this * Make an exception if this is the only connected link. In this
* case FW-memory congestion is less of a problem. * case FW-memory congestion is less of a problem.
* Note that a single connected STA means 3 active links, since we must * Note that a single connected STA means 2*ap_count + 1 active links,
* account for the global and broadcast AP links. The "fw_ps" check * since we must account for the global and broadcast AP links
* assures us the third link is a STA connected to the AP. Otherwise * for each AP. The "fw_ps" check assures us the other link is a STA
* the FW would not set the PSM bit. * connected to the AP. Otherwise the FW would not set the PSM bit.
*/ */
else if (wl->active_link_count > 3 && fw_ps && else if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
tx_pkts >= WL1271_PS_STA_MAX_PACKETS) tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
wl12xx_ps_link_start(wl, wlvif, hlid, true); wl12xx_ps_link_start(wl, wlvif, hlid, true);
} }
......
...@@ -134,12 +134,12 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl, ...@@ -134,12 +134,12 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl,
* into high-level PS and clean out its TX queues. * into high-level PS and clean out its TX queues.
* Make an exception if this is the only connected link. In this * Make an exception if this is the only connected link. In this
* case FW-memory congestion is less of a problem. * case FW-memory congestion is less of a problem.
* Note that a single connected STA means 3 active links, since we must * Note that a single connected STA means 2*ap_count + 1 active links,
* account for the global and broadcast AP links. The "fw_ps" check * since we must account for the global and broadcast AP links
* assures us the third link is a STA connected to the AP. Otherwise * for each AP. The "fw_ps" check assures us the other link is a STA
* the FW would not set the PSM bit. * connected to the AP. Otherwise the FW would not set the PSM bit.
*/ */
if (wl->active_link_count > 3 && fw_ps && if (wl->active_link_count > (wl->ap_count*2 + 1) && fw_ps &&
tx_pkts >= WL1271_PS_STA_MAX_PACKETS) tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
wl12xx_ps_link_start(wl, wlvif, hlid, true); wl12xx_ps_link_start(wl, wlvif, hlid, true);
} }
......
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