* [PATCH] mac80211: fix broken AP mode handling of powersave clients
@ 2016-11-03 9:59 Felix Fietkau
2016-11-03 10:51 ` Emmanuel Grumbach
0 siblings, 1 reply; 5+ messages in thread
From: Felix Fietkau @ 2016-11-03 9:59 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, emmanuel.grumbach
Commit c68df2e7be0c ("mac80211: allow using AP_LINK_PS with
mac80211-generated TIM IE") introduced a logic error, where
__sta_info_recalc_tim turns into a no-op if local->ops->set_tim is not
set. This prevents the beacon TIM bit from being set for all drivers
that do not implement this op (almost all of them), thus thoroughly
essential AP mode powersave functionality.
Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
net/mac80211/sta_info.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 236d47e..621734e 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending)
}
/* No need to do anything if the driver does all */
- if (!local->ops->set_tim)
+ if (local->ops->set_tim)
return;
if (sta->dead)
--
2.10.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] mac80211: fix broken AP mode handling of powersave clients 2016-11-03 9:59 [PATCH] mac80211: fix broken AP mode handling of powersave clients Felix Fietkau @ 2016-11-03 10:51 ` Emmanuel Grumbach 2016-11-03 10:51 ` Emmanuel Grumbach 0 siblings, 1 reply; 5+ messages in thread From: Emmanuel Grumbach @ 2016-11-03 10:51 UTC (permalink / raw) To: Felix Fietkau; +Cc: linux-wireless, Johannes Berg, Emmanuel Grumbach On Thu, Nov 3, 2016 at 11:59 AM, Felix Fietkau <nbd@nbd.name> wrote: > Commit c68df2e7be0c ("mac80211: allow using AP_LINK_PS with > mac80211-generated TIM IE") introduced a logic error, where > __sta_info_recalc_tim turns into a no-op if local->ops->set_tim is not > set. This prevents the beacon TIM bit from being set for all drivers > that do not implement this op (almost all of them), thus thoroughly > essential AP mode powersave functionality. > > Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com> > Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE") > Signed-off-by: Felix Fietkau <nbd@nbd.name> > --- > net/mac80211/sta_info.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c > index 236d47e..621734e 100644 > --- a/net/mac80211/sta_info.c > +++ b/net/mac80211/sta_info.c > @@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending) > } > > /* No need to do anything if the driver does all */ > - if (!local->ops->set_tim) > + if (local->ops->set_tim) > return; but ... then, you'll need call to drv_set_tim below... Apparently, we can't rely on the ops pointer to enter or not enter this flow. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] mac80211: fix broken AP mode handling of powersave clients 2016-11-03 10:51 ` Emmanuel Grumbach @ 2016-11-03 10:51 ` Emmanuel Grumbach 2016-11-03 11:08 ` Felix Fietkau 0 siblings, 1 reply; 5+ messages in thread From: Emmanuel Grumbach @ 2016-11-03 10:51 UTC (permalink / raw) To: Felix Fietkau; +Cc: linux-wireless, Johannes Berg, Emmanuel Grumbach On Thu, Nov 3, 2016 at 12:51 PM, Emmanuel Grumbach <egrumbach@gmail.com> wrote: > On Thu, Nov 3, 2016 at 11:59 AM, Felix Fietkau <nbd@nbd.name> wrote: >> Commit c68df2e7be0c ("mac80211: allow using AP_LINK_PS with >> mac80211-generated TIM IE") introduced a logic error, where >> __sta_info_recalc_tim turns into a no-op if local->ops->set_tim is not >> set. This prevents the beacon TIM bit from being set for all drivers >> that do not implement this op (almost all of them), thus thoroughly >> essential AP mode powersave functionality. >> >> Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com> >> Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE") >> Signed-off-by: Felix Fietkau <nbd@nbd.name> >> --- >> net/mac80211/sta_info.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c >> index 236d47e..621734e 100644 >> --- a/net/mac80211/sta_info.c >> +++ b/net/mac80211/sta_info.c >> @@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending) >> } >> >> /* No need to do anything if the driver does all */ >> - if (!local->ops->set_tim) >> + if (local->ops->set_tim) >> return; > > but ... then, you'll need call to drv_set_tim below... s/need/never/ > Apparently, we can't rely on the ops pointer to enter or not enter this flow. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] mac80211: fix broken AP mode handling of powersave clients 2016-11-03 10:51 ` Emmanuel Grumbach @ 2016-11-03 11:08 ` Felix Fietkau 2016-11-03 11:10 ` Emmanuel Grumbach 0 siblings, 1 reply; 5+ messages in thread From: Felix Fietkau @ 2016-11-03 11:08 UTC (permalink / raw) To: Emmanuel Grumbach; +Cc: linux-wireless, Johannes Berg, Emmanuel Grumbach On 2016-11-03 11:51, Emmanuel Grumbach wrote: > On Thu, Nov 3, 2016 at 12:51 PM, Emmanuel Grumbach <egrumbach@gmail.com> wrote: >> On Thu, Nov 3, 2016 at 11:59 AM, Felix Fietkau <nbd@nbd.name> wrote: >>> Commit c68df2e7be0c ("mac80211: allow using AP_LINK_PS with >>> mac80211-generated TIM IE") introduced a logic error, where >>> __sta_info_recalc_tim turns into a no-op if local->ops->set_tim is not >>> set. This prevents the beacon TIM bit from being set for all drivers >>> that do not implement this op (almost all of them), thus thoroughly >>> essential AP mode powersave functionality. >>> >>> Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com> >>> Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE") >>> Signed-off-by: Felix Fietkau <nbd@nbd.name> >>> --- >>> net/mac80211/sta_info.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c >>> index 236d47e..621734e 100644 >>> --- a/net/mac80211/sta_info.c >>> +++ b/net/mac80211/sta_info.c >>> @@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending) >>> } >>> >>> /* No need to do anything if the driver does all */ >>> - if (!local->ops->set_tim) >>> + if (local->ops->set_tim) >>> return; >> >> but ... then, you'll need call to drv_set_tim below... > > s/need/never/ > >> Apparently, we can't rely on the ops pointer to enter or not enter this flow. Are you going to submit a fix, or should I just send a revert of your commit? - Felix ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] mac80211: fix broken AP mode handling of powersave clients 2016-11-03 11:08 ` Felix Fietkau @ 2016-11-03 11:10 ` Emmanuel Grumbach 0 siblings, 0 replies; 5+ messages in thread From: Emmanuel Grumbach @ 2016-11-03 11:10 UTC (permalink / raw) To: Felix Fietkau; +Cc: linux-wireless, Johannes Berg, Emmanuel Grumbach On Thu, Nov 3, 2016 at 1:08 PM, Felix Fietkau <nbd@nbd.name> wrote: > On 2016-11-03 11:51, Emmanuel Grumbach wrote: >> On Thu, Nov 3, 2016 at 12:51 PM, Emmanuel Grumbach <egrumbach@gmail.com> wrote: >>> On Thu, Nov 3, 2016 at 11:59 AM, Felix Fietkau <nbd@nbd.name> wrote: >>>> Commit c68df2e7be0c ("mac80211: allow using AP_LINK_PS with >>>> mac80211-generated TIM IE") introduced a logic error, where >>>> __sta_info_recalc_tim turns into a no-op if local->ops->set_tim is not >>>> set. This prevents the beacon TIM bit from being set for all drivers >>>> that do not implement this op (almost all of them), thus thoroughly >>>> essential AP mode powersave functionality. >>>> >>>> Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com> >>>> Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE") >>>> Signed-off-by: Felix Fietkau <nbd@nbd.name> >>>> --- >>>> net/mac80211/sta_info.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c >>>> index 236d47e..621734e 100644 >>>> --- a/net/mac80211/sta_info.c >>>> +++ b/net/mac80211/sta_info.c >>>> @@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending) >>>> } >>>> >>>> /* No need to do anything if the driver does all */ >>>> - if (!local->ops->set_tim) >>>> + if (local->ops->set_tim) >>>> return; >>> >>> but ... then, you'll need call to drv_set_tim below... >> >> s/need/never/ >> >>> Apparently, we can't rely on the ops pointer to enter or not enter this flow. > Are you going to submit a fix, or should I just send a revert of your > commit? > Go ahead and send a revert. I won't be fast enough :) ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-11-03 11:10 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-11-03 9:59 [PATCH] mac80211: fix broken AP mode handling of powersave clients Felix Fietkau 2016-11-03 10:51 ` Emmanuel Grumbach 2016-11-03 10:51 ` Emmanuel Grumbach 2016-11-03 11:08 ` Felix Fietkau 2016-11-03 11:10 ` Emmanuel Grumbach
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox