From: Luca Coelho <luca@coelho.fi>
To: Michal Kazior <michal.kazior@tieto.com>
Cc: linux-wireless <linux-wireless@vger.kernel.org>,
Johannes Berg <johannes@sipsolutions.net>,
sw@simonwunderlich.de, "Otcheretianski,
Andrei" <andrei.otcheretianski@intel.com>
Subject: Re: [RFC v2 2/4] mac80211: implement chanctx reservation
Date: Fri, 28 Feb 2014 13:48:41 +0200 [thread overview]
Message-ID: <1393588121.13669.22.camel@dubbel> (raw)
In-Reply-To: <CA+BoTQkKCXvWPMPmFCbhXdfq4k4oOd2iiZwqWcbTu0EOT_0wbg@mail.gmail.com>
On Thu, 2014-02-27 at 16:16 +0100, Michal Kazior wrote:
> On 27 February 2014 15:41, Luca Coelho <luca@coelho.fi> wrote:
> > From: Luciano Coelho <luciano.coelho@intel.com>
> >
> > In order to support channel switch with multiple vifs and multiple
> > contexts, we implement a concept of channel context reservation. This
> > allows us to reserve a channel context to be used later.
> >
> > The reservation functionality is not tied directly to channel switch
> > and may be used in other situations (eg. reserving a channel context
> > during IBSS join).
> >
> > When reserving the context, the following algorithm is used:
> >
> > 1) try to find an existing context that matches our future chandef and
> > reserve it if it exists;
>
> > 2) otherwise, check if we're the only vif in the current context, in
> > which case we can just change our current context. To prevent
> > other vifs from joining this context in the meantime, we mark it as
> > exclusive. This is an optimization to avoid using extra contexts
> > when not necessary and requires the driver to support changing a
> > context on-the-fly;
>
> This commit part is out of date (you've moved this into a separate patch).
Good point, I'll fix this part.
>
> > @@ -611,6 +614,142 @@ int ieee80211_vif_change_channel(struct ieee80211_sub_if_data *sdata,
> > return ret;
> > }
> >
> > +int ieee80211_vif_unreserve_chanctx(struct ieee80211_sub_if_data *sdata)
> > +{
> > +
> > + lockdep_assert_held(&sdata->local->chanctx_mtx);
>
> Empty line :-)
Oops!
> > + if (sdata->vif.bss_conf.chandef.width != ctx->conf.def.width)
> > + local_changed |= BSS_CHANGED_BANDWIDTH;
> > +
> > + sdata->vif.bss_conf.chandef = ctx->conf.def;
>
> I think you should be simply using sdata->csa_chandef here. What's the
> point of setting the csa_chandef during reservation otherwise?
Yes, this is wrong.
> csa_chandef should probably be renamed to reserved_chandef for consistency.
I don't want to mess with CSA in this patch. I'll leave the csa_chandef
as it is. But you're right, I should use the "future" chandef, which
I'll add as reserved_chandef.
> > + /* unref our reservation before assigning */
> > + ctx->refcount--;
> > + sdata->reserved_chanctx = NULL;
> > + ret = ieee80211_assign_vif_chanctx(sdata, ctx);
> > + if (ret) {
> > + /* if assign fails refcount stays the same */
> > + if (ctx->refcount == 0)
> > + ieee80211_free_chanctx(local, ctx);
> > + goto out;
> > + }
> > +
> > + ieee80211_wake_queues_by_reason(&sdata->local->hw,
> > + IEEE80211_MAX_QUEUE_MAP,
> > + IEEE80211_QUEUE_STOP_REASON_CHANCTX);
>
> If you fail to assign chanctx you don't wake queues back. Is this intended?
This was not intended, it was a mistake. :) I'll fix it.
> > diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> > index 8603dfb..998fbbb 100644
> > --- a/net/mac80211/ieee80211_i.h
> > +++ b/net/mac80211/ieee80211_i.h
> > @@ -756,6 +756,8 @@ struct ieee80211_sub_if_data {
> > bool csa_radar_required;
> > struct cfg80211_chan_def csa_chandef;
> >
> > + struct ieee80211_chanctx *reserved_chanctx;
> > +
>
> It's a good idea to document this is protected by chanctx_mtx (and not
> wdev.mtx).
Good idea.
--
Luca.
next prev parent reply other threads:[~2014-02-28 11:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-27 14:41 [RFC v2 0/4] mac802111: channel context reservation (was: multi-vif/multi-channel CSA implementation) Luca Coelho
2014-02-27 14:41 ` [RFC v2 1/4] mac80211: split ieee80211_vif_change_channel in two Luca Coelho
2014-02-27 14:41 ` [RFC v2 2/4] mac80211: implement chanctx reservation Luca Coelho
2014-02-27 15:16 ` Michal Kazior
2014-02-28 11:48 ` Luca Coelho [this message]
2014-02-27 14:41 ` [RFC v2 3/4] mac80211: allow reservation of a running chanctx Luca Coelho
2014-02-27 15:29 ` Michal Kazior
2014-02-28 12:17 ` Luca Coelho
2014-02-28 12:56 ` Michal Kazior
2014-02-28 13:41 ` Luca Coelho
2014-02-28 14:07 ` Michal Kazior
2014-02-28 14:32 ` Luca Coelho
2014-02-28 14:55 ` Michal Kazior
2014-02-28 15:31 ` Luca Coelho
2014-03-03 9:57 ` Luca Coelho
2014-03-03 10:37 ` Luca Coelho
2014-03-03 10:38 ` Michal Kazior
2014-03-03 12:37 ` Luca Coelho
2014-03-03 13:26 ` Michal Kazior
2014-03-03 13:42 ` Luca Coelho
2014-03-03 13:57 ` Michal Kazior
2014-02-27 14:41 ` [RFC v2 4/4] mac80211: add usage of CS channel reservation for STA Luca Coelho
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393588121.13669.22.camel@dubbel \
--to=luca@coelho.fi \
--cc=andrei.otcheretianski@intel.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=michal.kazior@tieto.com \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).