2010-03-09 12:27:55

by Juuso Oikarinen

[permalink] [raw]
Subject: [PATCH] mac80211: Fix (dynamic) power save entry

Currently hardware with !IEEE80211_HW_PS_NULLFUNC_STACK and
IEEE80211_HW_REPORTS_TX_ACK_STATUS will never enter PSM due to the
conditions in the power save entry functions.

Fix those conditions.

Signed-off-by: Juuso Oikarinen <[email protected]>
---
net/mac80211/mlme.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 8f591a4..cc80659 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -436,10 +436,12 @@ static void ieee80211_enable_ps(struct ieee80211_local *local,
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)
ieee80211_send_nullfunc(local, sdata, 1);

- if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) {
- conf->flags |= IEEE80211_CONF_PS;
- ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
- }
+ if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&
+ (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS))
+ return;
+
+ conf->flags |= IEEE80211_CONF_PS;
+ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
}
}

@@ -558,7 +560,8 @@ void ieee80211_dynamic_ps_enable_work(struct work_struct *work)
(!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)))
ieee80211_send_nullfunc(local, sdata, 1);

- if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) ||
+ if (!((local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) &&
+ (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)) ||
(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) {
ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED;
local->hw.conf.flags |= IEEE80211_CONF_PS;
--
1.6.3.3



2010-03-10 05:38:47

by Juuso Oikarinen

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Fix (dynamic) power save entry

On Tue, 2010-03-09 at 18:58 +0100, ext Luis R. Rodriguez wrote:
> On Tue, Mar 9, 2010 at 4:25 AM, Juuso Oikarinen
> <[email protected]> wrote:
> > Currently hardware with !IEEE80211_HW_PS_NULLFUNC_STACK and
> > IEEE80211_HW_REPORTS_TX_ACK_STATUS will never enter PSM due to the
> > conditions in the power save entry functions.
> >
> > Fix those conditions.
>
> Is this a stable fix, for 33?
>
> Luis

I have only tested this on our hardware (wl1271), which is configured as
stated above - though I tried to consider all other combinations of
those two flags too, but I haven't tested them.

-Juuso


2010-03-09 17:59:05

by Luis R. Rodriguez

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Fix (dynamic) power save entry

On Tue, Mar 9, 2010 at 4:25 AM, Juuso Oikarinen
<[email protected]> wrote:
> Currently hardware with !IEEE80211_HW_PS_NULLFUNC_STACK and
> IEEE80211_HW_REPORTS_TX_ACK_STATUS will never enter PSM due to the
> conditions in the power save entry functions.
>
> Fix those conditions.

Is this a stable fix, for 33?

Luis