Search Linux Wireless

Re: [PATCH 6/7] mac80211: wait for the first beacon on the new channel after CSA

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

 



Sorry for the delay in replying.


On Mon, 2014-09-29 at 11:02 +0200, Michal Kazior wrote:
> On 26 September 2014 21:35, Luca Coelho <luca@xxxxxxxxx> wrote:
> > From: Luciano Coelho <luciano.coelho@xxxxxxxxx>
> >
> > Instead of immediately reopening the queues (in case of block_tx),
> > calling the post_channel_switch operation and sending the
> > notification, wait for the first beacon on the new channel.  This
> > makes sure that we don't lose packets if the AP/GO is not on the new
> > channel yet.
> >
> > Signed-off-by: Luciano Coelho <luciano.coelho@xxxxxxxxx>
> [...]
> 
> Just a few nitpicks from me:
> 
> > +static void ieee80211_chswitch_post_beacon(struct ieee80211_sub_if_data *sdata)
> > +{
> > +       struct ieee80211_local *local = sdata->local;
> > +       struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
> > +       int ret;
> > +
> > +       sdata_assert_lock(sdata);
> >
> 
> I was thinking about WARN_ON(!sdata->vif.csa_active) here. csa_active
> should be set in all cases if csa_waiting_bcn is set, no?

Good idea, csa_active must still be true otherwise we may get into
trouble.  I'll add the WARN_ON.


> 
> > -       /* XXX: wait for a beacon first? */
> >         if (sdata->csa_block_tx) {
> >                 ieee80211_wake_vif_queues(local, sdata,
> >                                           IEEE80211_QUEUE_STOP_REASON_CSA);
> >                 sdata->csa_block_tx = false;
> >         }
> >
> > +       sdata->vif.csa_active = false;
> > +       ifmgd->csa_waiting_bcn = false;
> > +
> >         ret = drv_post_channel_switch(sdata);
> >         if (ret) {
> >                 sdata_info(sdata,
> >                            "driver post channel switch failed, disconnecting\n");
> >                 ieee80211_queue_work(&local->hw,
> >                                      &ifmgd->csa_connection_drop_work);
> > -               goto out;
> > +               return;
> >         }
> >       <---- here
> > -       ieee80211_sta_reset_beacon_monitor(sdata);
> > -       ieee80211_sta_reset_conn_monitor(sdata);
> > -
> > -out:
> > -       mutex_unlock(&local->chanctx_mtx);
> > -       mutex_unlock(&local->mtx);
> > -       sdata_unlock(sdata);
> >  }
> 
> Is that an empty line I before final `}`?

Yep, good catch, I'll fix it.

--
Luca.

--
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 Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux