mac80211_hwsim: enforce PS_MANUAL_POLL to be set after PS_ENABLED
Enforce using PS_MANUAL_POLL in ps hwsim debugfs to trigger a poll, only if PS_ENABLED was set before. This is required due to commit c9491367b759 ("mac80211: always update the PM state of a peer on MGMT / DATA frames") that enforces the ap to check only mgmt/data frames ps bit, and then update station's power save accordingly. When sending only ps-poll (control frame) the ap will not be aware that the station entered power save. Setting ps enable before triggering ps_poll, will send NDP with PM bit enabled first. Signed-off-by: Adiel Aloni <adiel.aloni@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
a9d09bc1bc
commit
e16ea4bb51
@ -727,16 +727,21 @@ static int hwsim_fops_ps_write(void *dat, u64 val)
|
|||||||
val != PS_MANUAL_POLL)
|
val != PS_MANUAL_POLL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (val == PS_MANUAL_POLL) {
|
||||||
|
if (data->ps != PS_ENABLED)
|
||||||
|
return -EINVAL;
|
||||||
|
local_bh_disable();
|
||||||
|
ieee80211_iterate_active_interfaces_atomic(
|
||||||
|
data->hw, IEEE80211_IFACE_ITER_NORMAL,
|
||||||
|
hwsim_send_ps_poll, data);
|
||||||
|
local_bh_enable();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
old_ps = data->ps;
|
old_ps = data->ps;
|
||||||
data->ps = val;
|
data->ps = val;
|
||||||
|
|
||||||
local_bh_disable();
|
local_bh_disable();
|
||||||
if (val == PS_MANUAL_POLL) {
|
if (old_ps == PS_DISABLED && val != PS_DISABLED) {
|
||||||
ieee80211_iterate_active_interfaces_atomic(
|
|
||||||
data->hw, IEEE80211_IFACE_ITER_NORMAL,
|
|
||||||
hwsim_send_ps_poll, data);
|
|
||||||
data->ps_poll_pending = true;
|
|
||||||
} else if (old_ps == PS_DISABLED && val != PS_DISABLED) {
|
|
||||||
ieee80211_iterate_active_interfaces_atomic(
|
ieee80211_iterate_active_interfaces_atomic(
|
||||||
data->hw, IEEE80211_IFACE_ITER_NORMAL,
|
data->hw, IEEE80211_IFACE_ITER_NORMAL,
|
||||||
hwsim_send_nullfunc_ps, data);
|
hwsim_send_nullfunc_ps, data);
|
||||||
|
Loading…
Reference in New Issue
Block a user