Search Linux Wireless

RE: [PATCH] mwifiex: toggle carrier state in start_ap/stop_ap.

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

 



Hi Avinash

> From: linux-wireless-owner@xxxxxxxxxxxxxxx [mailto:linux-wireless-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Avinash Patil
> Sent: Wednesday, October 21, 2015 1:50 AM
> To: Marty Faltesek
> Cc: linux-wireless@xxxxxxxxxxxxxxx; Amitkumar Karwar; Nishant
> Sarmukadam; Denton Gentry; Avery Pennarun
> Subject: Re: [PATCH] mwifiex: toggle carrier state in start_ap/stop_ap.
> 
> Hello Marty,
> 
> 
> On Mon, Oct 19, 2015 at 11:49 AM, Marty Faltesek <mfaltesek@xxxxxxxxxx>
> wrote:
> >
> > In uap mode the carrier is not enabled until after the first STA
> joins.
> > The carrier triggers the bridge to start its state machine, and if STP
> > is enabled, it takes 4 seconds as it transitions from disabled to
> > forwarding. During this time the bridge drops all traffic, and the
> > EAPOL handshake times out after 3 seconds, preventing stations from
> joining.
> >
> > Follow the logic used in mac80211 and start the carrier in start_ap
> > and disable it in stop_ap. This has a nice benefit of allowing the
> > first station connection time to be reduced by up to 75% when STP is
> > in use.
> >
> > Signed-off-by: Martin Faltesek <mfaltesek@xxxxxxxxxx>
> > ---
> >  drivers/net/wireless/mwifiex/cfg80211.c  | 12 ++++++++++++
> > drivers/net/wireless/mwifiex/uap_event.c | 11 -----------
> >  2 files changed, 12 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/net/wireless/mwifiex/cfg80211.c
> > b/drivers/net/wireless/mwifiex/cfg80211.c
> > index 495621f..275ce3c 100644
> > --- a/drivers/net/wireless/mwifiex/cfg80211.c
> > +++ b/drivers/net/wireless/mwifiex/cfg80211.c
> > @@ -1765,6 +1765,13 @@ static int mwifiex_cfg80211_stop_ap(struct
> wiphy *wiphy, struct net_device *dev)
> >                 return -1;
> >         }
> >
> > +       priv->media_connected = false;
> > +       if (netif_carrier_ok(priv->netdev))
> > +               netif_carrier_off(priv->netdev);
> > +       mwifiex_stop_net_dev_queue(priv->netdev, priv->adapter);
> > +       mwifiex_clean_txrx(priv);
> > +       mwifiex_del_all_sta_list(priv);
> > +
> >         return 0;
> >  }
> >
> > @@ -1863,6 +1870,11 @@ static int mwifiex_cfg80211_start_ap(struct
> wiphy *wiphy,
> >         if (mwifiex_set_mgmt_ies(priv, &params->beacon))
> >                 return -1;
> >
> > +       priv->media_connected = true;
> > +       if (!netif_carrier_ok(priv->netdev))
> > +               netif_carrier_on(priv->netdev);
> > +       mwifiex_wake_up_net_dev_queue(priv->netdev, priv->adapter);
> > +
> >         memcpy(&priv->bss_cfg, bss_cfg, sizeof(priv->bss_cfg));
> >         kfree(bss_cfg);
> >         return 0;
> > diff --git a/drivers/net/wireless/mwifiex/uap_event.c
> > b/drivers/net/wireless/mwifiex/uap_event.c
> > index f4794cd..c5bb6ee 100644
> > --- a/drivers/net/wireless/mwifiex/uap_event.c
> > +++ b/drivers/net/wireless/mwifiex/uap_event.c
> > @@ -113,19 +113,8 @@ int mwifiex_process_uap_event(struct
> mwifiex_private *priv)
> >                 mwifiex_del_sta_entry(priv, deauth_mac);
> >                 break;
> >         case EVENT_UAP_BSS_IDLE:
> > -               priv->media_connected = false;
> > -               if (netif_carrier_ok(priv->netdev))
> > -                       netif_carrier_off(priv->netdev);
> > -               mwifiex_stop_net_dev_queue(priv->netdev, adapter);
> > -
> > -               mwifiex_clean_txrx(priv);
> > -               mwifiex_del_all_sta_list(priv);
> >                 break;
> >         case EVENT_UAP_BSS_ACTIVE:
> > -               priv->media_connected = true;
> 
> I remember we have encountered an issue if we download packets to
> interface/FW before bss has become active. I think media_connected
> cannot be set to true in start_ap; this may cause issues.
> 
> Amit,
> I would suggest running some tests to see that FW does not crash if we
> set media_connected before BSS_ACTIVE event.
> 
> Also, this patch has side-effect of cleaning TXRX and station list data
> structures only in stop_ap. This is not correct. There is no point in
> holding these structures/memory if no stations are connected.
> 

Thanks for your review.

I suppose only carrier state toggle logic (netif_carrier_off/on lines) need to be moved to start_ap/stop_ap to fix the problem.
I will run some tests and submit updated version.

Regards,
Amitkumar
��.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