2010-04-09 08:50:44

by Juuso Oikarinen

[permalink] [raw]
Subject: [PATCH] mac80211: Prevent dynamic ps for rx broadcast frames

Currently the dynamic ps timer is restarted for all non-multicast rx data
frames. Congested networks have lots of broadcast traffic, which will cause
the power save to remain disabled for much of the time, which causes trouble
for battery-powered devices.

Fix this by preventing rx broadcast data frames from restarting the
dynamic ps timer.

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

diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index c0ad7e8..8cdcc4f 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1786,6 +1786,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)

if (ieee80211_is_data(hdr->frame_control) &&
!is_multicast_ether_addr(hdr->addr1) &&
+ !is_broadcast_ether_addr(hdr->addr1) &&
local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
--
1.6.3.3



2010-04-09 09:22:04

by Juuso Oikarinen

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Prevent dynamic ps for rx broadcast frames

On Fri, 2010-04-09 at 11:12 +0200, ext Johannes Berg wrote:
> On Fri, 2010-04-09 at 11:46 +0300, Juuso Oikarinen wrote:
> > Currently the dynamic ps timer is restarted for all non-multicast rx data
> > frames. Congested networks have lots of broadcast traffic, which will cause
> > the power save to remain disabled for much of the time, which causes trouble
> > for battery-powered devices.
> >
> > Fix this by preventing rx broadcast data frames from restarting the
> > dynamic ps timer.
> >
> > Signed-off-by: Juuso Oikarinen <[email protected]>
> > ---
> > net/mac80211/rx.c | 1 +
> > 1 files changed, 1 insertions(+), 0 deletions(-)
> >
> > diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> > index c0ad7e8..8cdcc4f 100644
> > --- a/net/mac80211/rx.c
> > +++ b/net/mac80211/rx.c
> > @@ -1786,6 +1786,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
> >
> > if (ieee80211_is_data(hdr->frame_control) &&
> > !is_multicast_ether_addr(hdr->addr1) &&
> > + !is_broadcast_ether_addr(hdr->addr1) &&
> > local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
>
> Huh? I'm starting to doubt my own sanity now!
>
> Formal logic:
>
> (bcast => mcast)
> <=> (!mcast => !bcast)
>
> Thus
>
> (!mcast && !bcast)
> <=> (!mcast)
>
> right?

Heh, don't doubt your sanity. It's me who has lost his.

You're obviously right. I don't even try to explain what I just thought.
Everyone, pretend you never saw this ;)

-Juuso

> johannes
>



2010-04-09 09:12:42

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Prevent dynamic ps for rx broadcast frames

On Fri, 2010-04-09 at 11:46 +0300, Juuso Oikarinen wrote:
> Currently the dynamic ps timer is restarted for all non-multicast rx data
> frames. Congested networks have lots of broadcast traffic, which will cause
> the power save to remain disabled for much of the time, which causes trouble
> for battery-powered devices.
>
> Fix this by preventing rx broadcast data frames from restarting the
> dynamic ps timer.
>
> Signed-off-by: Juuso Oikarinen <[email protected]>
> ---
> net/mac80211/rx.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index c0ad7e8..8cdcc4f 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -1786,6 +1786,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
>
> if (ieee80211_is_data(hdr->frame_control) &&
> !is_multicast_ether_addr(hdr->addr1) &&
> + !is_broadcast_ether_addr(hdr->addr1) &&
> local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {

Huh? I'm starting to doubt my own sanity now!

Formal logic:

(bcast => mcast)
<=> (!mcast => !bcast)

Thus

(!mcast && !bcast)
<=> (!mcast)

right?

johannes