Search Linux Wireless

Re: [RFC] mac80211: take reserved vif into account when calculating the min_def

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

 



On 27 November 2014 at 13:30, Emmanuel Grumbach
<emmanuel.grumbach@xxxxxxxxx> wrote:
> When we want to calculate the minimal bandwidth needed for
> a channel context, we need to take into account vifs that
> have reserved the channel context.
> I hit an issue with iwlwifi and channel switch as a client.
>
> We would allocate a virgin channel context and reserve it.
> At that stage, the min_def was 20MHz.
> Then we would use it after CSA, and start transmitting, but
> the channel context was still 20MHz even if the GO was in
> 40MHz. This made the firmware unhappy.
>
> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx>
> ---
>  net/mac80211/chan.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
> index 4c74e8d..769e0c5 100644
> --- a/net/mac80211/chan.c
> +++ b/net/mac80211/chan.c
> @@ -256,7 +256,8 @@ ieee80211_get_chanctx_max_required_bw(struct ieee80211_local *local,
>                 if (!ieee80211_sdata_running(sdata))
>                         continue;
>
> -               if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
> +               if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf &&
> +                   &sdata->reserved_chanctx->conf != conf)
>                         continue;
>
>                 switch (vif->type) {
> @@ -271,6 +272,7 @@ ieee80211_get_chanctx_max_required_bw(struct ieee80211_local *local,
>                 case NL80211_IFTYPE_WDS:
>                 case NL80211_IFTYPE_MESH_POINT:
>                         width = vif->bss_conf.chandef.width;
> +                       width = max(width, sdata->reserved_chandef.width);

Not really sure why this is needed in this patch?


>                         break;
>                 case NL80211_IFTYPE_UNSPECIFIED:
>                 case NUM_NL80211_IFTYPES:
> @@ -899,6 +901,8 @@ int ieee80211_vif_reserve_chanctx(struct ieee80211_sub_if_data *sdata,
>         sdata->reserved_radar_required = radar_required;
>         sdata->reserved_ready = false;
>
> +       ieee80211_recalc_chanctx_min_def(local, new_ctx);
> +

Hmm.. Wouldn't it make sense to recalc this in
ieee80211_vif_unreserve_ chanctx() as well?


Michał
--
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