Search Linux Wireless

Re: [RFC] mac80211: dynamic PS - don't enter PS when TX frames are pending

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

 



On Tue, Jun 21, 2011 at 09:33, Vivek Natarajan <vivek.natraj@xxxxxxxxx> wrote:
>
> Well, I can't find any way to stop this race. :)
> Atleast the other race could be fixed with stop_queues.

Sure I'll add a stop_queues for for the IEEE80211_HW_PS_NULLFUNC_STACK
case. If you can't hit the other race I guess it doesn't matter. It's
a corner case anyway.

> How about the below patch? I am not sure about the disable_dynamic_ps
> and its BT/WLAN antenna sharing. Please add that if you see it as
> appropriate.

I think the disable_dynamic_ps and peers are needed. Otherwise we risk
getting inconsistent PS notifications from mac80211 when dyn_ps is
disabled.

>
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index faca503..67ecad1 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -778,15 +778,14 @@ void ieee80211_dynamic_ps_enable_work(struct
> work_struct *work)
>        }
>        spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
>
> -       if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&
> -           (!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED))) {
> +       if (!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) {
>                netif_tx_stop_all_queues(sdata->dev);
>
>                if (drv_tx_frames_pending(local))
>                        mod_timer(&local->dynamic_ps_timer, jiffies +
>                                  msecs_to_jiffies(
>                                  local->hw.conf.dynamic_ps_timeout));
> -               else {
> +               else if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) {
>                        ieee80211_send_nullfunc(local, sdata, 1);
>                        /* Flush to get the tx status of nullfunc frame */
>                        drv_flush(local, false);
>

Well drivers without IEEE80211_HW_PS_NULLFUNC_STACK need to leave the
function after mod_timer(). Otherwise we end up changing the PS state
anyway.
But yea, basically its very similar to my patch.

I'll submit a v2 with the stop_queues pending Sam's review.

Arik
--
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