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?
> 

Hmm... You are right - I think I got confused here :)
I guess I need to verify that removing this hunk still solves my bug.
In general though, what option would you prefer?

Internally, we had different opinions here.

> 
> >                         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?

Probably - I need to add this.

> 
> 
> Michał
��.n��������+%������w��{.n�����{���zW����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f





[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