mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 07:46:53 +07:00
wlcore: fix link count in single-link-PSM optimization
commit 144614f3eebd7d only allowed a single active link when turning on the optimization, ignoring the fact that an AP has two additional global links. Use 3 links as an indication for a single active link. Use the FW PSM bits to verify the extra active link belongs to the AP role. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
d21553f890
commit
37c68ea699
@ -332,10 +332,9 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
|
||||
struct wl12xx_vif *wlvif,
|
||||
u8 hlid, u8 tx_pkts)
|
||||
{
|
||||
bool fw_ps, single_link;
|
||||
bool fw_ps;
|
||||
|
||||
fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
|
||||
single_link = (wl->active_link_count == 1);
|
||||
|
||||
/*
|
||||
* Wake up from high level PS if the STA is asleep with too little
|
||||
@ -348,8 +347,13 @@ static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
|
||||
* 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
|
||||
* case FW-memory congestion is less of a problem.
|
||||
* Note that a single connected STA means 3 active links, since we must
|
||||
* account for the global and broadcast AP links. The "fw_ps" check
|
||||
* assures us the third link is a STA connected to the AP. Otherwise
|
||||
* the FW would not set the PSM bit.
|
||||
*/
|
||||
else if (!single_link && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
|
||||
else if (wl->active_link_count > 3 && fw_ps &&
|
||||
tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
|
||||
wl12xx_ps_link_start(wl, wlvif, hlid, true);
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl,
|
||||
struct wl12xx_vif *wlvif,
|
||||
u8 hlid)
|
||||
{
|
||||
bool fw_ps, single_link;
|
||||
bool fw_ps;
|
||||
u8 tx_pkts;
|
||||
|
||||
if (WARN_ON(!test_bit(hlid, wlvif->links_map)))
|
||||
@ -112,15 +112,19 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl,
|
||||
|
||||
fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
|
||||
tx_pkts = wl->links[hlid].allocated_pkts;
|
||||
single_link = (wl->active_link_count == 1);
|
||||
|
||||
/*
|
||||
* if in FW PS and there is enough data in FW we can put the link
|
||||
* into high-level PS and clean out its TX queues.
|
||||
* Make an exception if this is the only connected link. In this
|
||||
* case FW-memory congestion is less of a problem.
|
||||
* Note that a single connected STA means 3 active links, since we must
|
||||
* account for the global and broadcast AP links. The "fw_ps" check
|
||||
* assures us the third link is a STA connected to the AP. Otherwise
|
||||
* the FW would not set the PSM bit.
|
||||
*/
|
||||
if (!single_link && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
|
||||
if (wl->active_link_count > 3 && fw_ps &&
|
||||
tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
|
||||
wl12xx_ps_link_start(wl, wlvif, hlid, true);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user