Return-path: Received: from mail-oi0-f65.google.com ([209.85.218.65]:34053 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754383AbcKCKva (ORCPT ); Thu, 3 Nov 2016 06:51:30 -0400 Received: by mail-oi0-f65.google.com with SMTP id 62so5899920oif.1 for ; Thu, 03 Nov 2016 03:51:29 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <20161103095938.84054-1-nbd@nbd.name> From: Emmanuel Grumbach Date: Thu, 3 Nov 2016 12:51:29 +0200 Message-ID: (sfid-20161103_115134_679301_FD6B7DE6) Subject: Re: [PATCH] mac80211: fix broken AP mode handling of powersave clients To: Felix Fietkau Cc: linux-wireless , Johannes Berg , Emmanuel Grumbach Content-Type: text/plain; charset=UTF-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: On Thu, Nov 3, 2016 at 12:51 PM, Emmanuel Grumbach wrote: > On Thu, Nov 3, 2016 at 11:59 AM, Felix Fietkau 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 >> Fixes: c68df2e7be0c ("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE") >> Signed-off-by: Felix Fietkau >> --- >> 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.