On Tue, 2012-06-26 at 14:37 +0200, Michal Kazior wrote:
> +static enum nl80211_channel_type
> +ieee80211_calc_chantype(struct ieee80211_local *local,
> + struct ieee80211_chanctx *ctx)
> +{
> + struct ieee80211_chanctx_conf *conf = &ctx->conf;
> + struct ieee80211_sub_if_data *sdata;
> + enum nl80211_channel_type chantype = NL80211_CHAN_NO_HT;
> + enum nl80211_channel_type compat;
> +
> + lockdep_assert_held(&local->chanctx_mtx);
> +
> + rcu_read_lock();
> + list_for_each_entry_rcu(sdata, &local->interfaces, list) {
> + if (!ieee80211_sdata_running(sdata))
> + continue;
> + if (sdata->vif.chanctx_conf != conf)
> + continue;
> +
> + BUG_ON(!ieee80211_channel_types_are_compatible(
> + conf->channel_type, chantype, &compat));
Please no BUG_ON, maybe only WARN_ON_ONCE even?
> + chantype = compat;
> + }
> + rcu_read_unlock();
> +
> + return chantype;
> +}
I don't think I understand this, wouldn't it need some per-vif requested
channel type to work correctly? I don't see any chantype values coming
from the sdata here, so I don't think this could work?
If say vif1 needs ht40+ and vif2 ht20, the channel context will be set
to ht40+, but then if vif1 goes away and you don't know anything about
vif2 at all, then how can this work? The way I see it, your code here
doesn't really do anything, except recalculate that ht40+ is compatible
with ht40+, or something like that? I guess I'm a bit confused, it seems
to me that this cannot work even in theory unless you have per-vif data.
> static void
> ieee80211_unassign_vif_chanctx(struct ieee80211_sub_if_data *sdata,
> struct ieee80211_chanctx *ctx)
> @@ -248,6 +302,8 @@ ieee80211_unassign_vif_chanctx(struct ieee80211_sub_if_data *sdata,
>
> drv_unassign_vif_chanctx(sdata->local, sdata, ctx);
>
> + ieee80211_recalc_chanctx_chantype(sdata->local, ctx);
> +
> ctx->refcount--;
> sdata->vif.chanctx_conf = NULL;
And then shouldn't you recalc *after* setting chanctx_conf = NULL so you
skip this vif?
johannes
--
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
[Linux Kernel]
[Linux Bluetooth]
[Linux Netdev]
[Kernel Newbies]
[Share Photos]
[IDE]
[Security]
[Git]
[Netfilter]
[Bugtraq]
[Photo]
[Yosemite]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Linux ATA RAID]
[Samba]
[Video 4 Linux]
[Device Mapper]
[Linux Resources]
[Free Dating]
[M2M Wireless]