linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: Michal Kazior <michal.kazior@tieto.com>
Cc: "linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Subject: Re: [RFC v3] initial channel context implementation
Date: Thu, 28 Jun 2012 10:13:00 +0200	[thread overview]
Message-ID: <1340871180.4491.16.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <4FEC0D9F.9030000@tieto.com>

On Thu, 2012-06-28 at 09:54 +0200, Michal Kazior wrote:

> >> Yes, this is more or less what I also had in mind. I was just thinking
> >> about solving the issue of channel context and hw.conf.channel
> >> consistency. If we switch a channel we either modify channel in channel
> >> context directly (violating the immutability of channel contexts) or we
> >> iterate and re-set the new channel on each interface (because
> >> single-channel drivers may still have multiple interfaces and we
> >> probably want to use sdata->vif.chanctx_conf->channel instead of
> >> hw.conf.channel inside mac80211).
> >>
> >> Now that I think about it I guess violating the immutability for the
> >> single-channel case is okay. It would greatly simplify the code and we'd
> >> just put a comment down in hw_config where the only violation would occur.
> >
> > I'm not sure why we would violate it? The way I see it, you'd never
> > change the channel context channel since internally in mac80211 you'd
> > never want to see a different channel, just like today we use
> > local->oper_channel everywhere we'd then use sdata->vif.chanctx->channel
> > throughout, right?
> >
> > I think the only thing we need to do is put something like this into
> > hw_config:
> >
> >   if (local->tmp_channel) {
> >      local->hw.conf.channel = local->tmp_channel;
> >      ...
> >   } else {
> >      local->hw.conf.channel = chanctx->channel;
> >   }
> >
> > No?
> 
> Using sdata->vif.chanctx_conf->channel instead of local->oper_channel 
> doesn't make any sense to me.
> 
> Take ieee80211_tx() for example. It does:
> 
> 	tx.channel = local->hw.conf.channel;
> 
> We don't use oper_channel here, but hw.conf.channel. TX can happen on 
> different interfaces so for multi-channel operation it should be saying:
> 
> 	tx.channel = sdata->vif.chanctx_conf->channel;
> 
> In this case if we want to support the swscan/tmpchan through 
> hw_config() we need update the channel context's channel somehow.
> 
> I'm more thinking of hw.conf.channel becoming more of a backup value for 
> single-channel drivers while we internally focus on channel contexts.

Yes, makes sense. I forgot all about the TX code. I'm a little wary of
making the contexts mutable, even in this case, because a lot of code
uses local->oper_channel as well, and that is expected to really be the
operating channel all of the time, even if we're scanning at some point
in time.

Luckily, tx.channel isn't actually used much, only for the band. So if
we tag the SKBs with the band earlier (info->band), maybe we don't need
to use hw.conf.channel as much there for tx.channel?

Other uses where we do need the current channel are
 * ieee80211_build_probe_req
 * ieee80211_add_srates_ie/ieee80211_add_ext_srates_ie
 * __ieee80211_start_scan uses it but need not, could use oper_channel
   instead and the code never executes for multi-channel
 * ieee80211_set_tx_power() is interesting, may need to make it all
   per-sdata now through nl80211 etc.
 * rate_idx_to_bitrate can use the sta's sdata's channel
 * ieee80211_change_bss can use the sdata's channel
 * debugfs stuff probably just moves to per-sdata files
 * ibss code all uses sdata channel
 * ieee80211_if_change_type ... probably just set basic_rates = 0
 * mesh can use sdata channel
 * mlme.c should use sdata channel, but there's the channel switch stuff
 * rate.h should use sta->sdata channel

Much of this is actually means we have bugs today! Whenever we use
hw.conf.channel and should be using sdata channel soon, we should be
using local->oper_channel today!

Maybe it's worth fixing that first, and getting rid of *most* instances
of hw.conf.channel, so we have a clearer idea of which changes in what
ways?

And then we can analyse the remaining instances of hw.conf.channel more
closely to see why they need to have the current channel (like tx code)
and see what needs to be done about them?

johannes


  reply	other threads:[~2012-06-28  8:13 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-26 12:37 [RFC v3] initial channel context implementation Michal Kazior
2012-06-26 12:37 ` [RFC v3 1/7] mac80211: introduce channel context skeleton code Michal Kazior
2012-06-26 12:37 ` [RFC v3 2/7] mac80211: introduce new ieee80211_ops Michal Kazior
2012-06-26 12:37 ` [RFC v3 3/7] mac80211: add drv_* wrappers for channel contexts Michal Kazior
2012-06-26 12:37 ` [RFC v3 4/7] mac80211: add chanctx tracing Michal Kazior
2012-06-26 12:37 ` [RFC v3 5/7] mac80211: use channel context notifications Michal Kazior
2012-06-26 13:35   ` Johannes Berg
2012-06-26 14:01     ` Michal Kazior
2012-06-26 15:34       ` Johannes Berg
2012-06-26 12:37 ` [RFC v3 6/7] mac80211: refactor set_channel_type Michal Kazior
2012-06-26 14:04   ` Eliad Peller
2012-06-26 12:37 ` [RFC v3 7/7] mac80211: reuse channels for channel contexts Michal Kazior
2012-06-26 13:41   ` Johannes Berg
2012-06-26 13:55     ` Michal Kazior
2012-06-26 15:34       ` Johannes Berg
2012-06-26 13:43 ` [RFC v3] initial channel context implementation Johannes Berg
2012-06-27  7:30   ` Michal Kazior
2012-06-27  8:10     ` Johannes Berg
2012-06-27 10:13       ` Michal Kazior
2012-06-27 11:10         ` Johannes Berg
2012-06-27 12:43           ` Michal Kazior
2012-06-27 14:02             ` Johannes Berg
2012-06-28  6:04               ` Michal Kazior
2012-06-28  7:31                 ` Johannes Berg
2012-06-28  7:54                   ` Michal Kazior
2012-06-28  8:13                     ` Johannes Berg [this message]
2012-06-28  9:20                       ` Michal Kazior
2012-06-28  9:27                         ` Johannes Berg
2012-06-28  9:47                           ` Michal Kazior
2012-06-28  7:01               ` Michal Kazior
2012-06-28  8:15                 ` Johannes Berg
2012-06-28  8:54                   ` Michal Kazior
2012-06-28  9:27                     ` Johannes Berg
2012-07-25 10:22 ` Johannes Berg

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=1340871180.4491.16.camel@jlt3.sipsolutions.net \
    --to=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=michal.kazior@tieto.com \
    /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).