Search Linux Wireless

Re: [PATCH 2/3] mac80211: Fix incorrect num_sta_ps decrement in ap_sta_ps_end

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 27, 2012 at 11:02 AM, Helmut Schaa
<helmut.schaa@xxxxxxxxxxxxxx> wrote:
> If the driver blocked this specific STA with the help of
> ieee80211_sta_block_awake we won't clear WLAN_STA_PS_STA later but
> still decrement num_sta_ps. Hence, the next data frame from this
> STA will trigger ap_sta_ps_end again and also decrement num_sta_ps
> again leading to an incorrect num_sta_ps counter.
>
> This can result in problems with powersaving clients not waking up
> from PS because the TIM calculation might be skipped due to the
> incorrect num_sta_ps counter.

John, I need to send a v2 for this since it introduces a warning:

net/mac80211/rx.c: In function ‘ap_sta_ps_end’:
net/mac80211/rx.c:1148:32: warning: unused variable ‘sdata’ [-Wunused-variable]

Helmut

> Signed-off-by: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx>
> ---
>  net/mac80211/rx.c       |    1 -
>  net/mac80211/sta_info.c |    4 +++-
>  2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 3567586..f89617a 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -1147,7 +1147,6 @@ static void ap_sta_ps_end(struct sta_info *sta)
>  {
>        struct ieee80211_sub_if_data *sdata = sta->sdata;
>
> -       atomic_dec(&sdata->bss->num_sta_ps);
>
>  #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
>        printk(KERN_DEBUG "%s: STA %pM aid %d exits power save mode\n",
> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
> index 70a0de3..92b894c 100644
> --- a/net/mac80211/sta_info.c
> +++ b/net/mac80211/sta_info.c
> @@ -1007,9 +1007,11 @@ EXPORT_SYMBOL(ieee80211_find_sta);
>  static void clear_sta_ps_flags(void *_sta)
>  {
>        struct sta_info *sta = _sta;
> +       struct ieee80211_sub_if_data *sdata = sta->sdata;
>
>        clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
> -       clear_sta_flag(sta, WLAN_STA_PS_STA);
> +       if (test_and_clear_sta_flag(sta, WLAN_STA_PS_STA))
> +               atomic_dec(&sdata->bss->num_sta_ps);
>  }
>
>  /* powersave support code */
> --
> 1.7.7
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux