Actually, I dont need the rmmod/modprobe of the module, I just need to do 
a /et   c/init.d/net.eth1 restart. So maybe just an isssue with wpa_supplicant 
or a missing ifconfig eth1 up?



Chris


On Wednesday 27 September 2006 19:50, Michael Buesch wrote:
> On Wednesday 27 September 2006 18:18, Larry Finger wrote:
> > Michael Buesch wrote:
> > > This fixes some race conditions in the WirelessExtension
> > > handling and association handling code.
> > >
> > > Signed-off-by: Michael Buesch <[EMAIL PROTECTED]>
> > >
> > > ---
> >
> > This patch doesn't apply.
>
> Oh, linville merged stuff on the 25th. That's the day I updated
> my tree to do this patch. But seems like I did it just before
> the merge.
> Who could suspect that linville merges something. :D
> *me runs away*
>
> Anyway. Here's an updated patch.
>
>
> Index: wireless-2.6/include/net/ieee80211softmac.h
> ===================================================================
> --- wireless-2.6.orig/include/net/ieee80211softmac.h  2006-09-27
> 19:34:20.000000000 +0200 +++
> wireless-2.6/include/net/ieee80211softmac.h   2006-09-27 19:36:39.000000000
> +0200 @@ -63,13 +63,11 @@ struct ieee80211softmac_wpa {
>
>  /*
>   * Information about association
> - *
> - * Do we need a lock for this?
> - * We only ever use this structure inlined
> - * into our global struct. I've used its lock,
> - * but maybe we need a local one here?
>   */
>  struct ieee80211softmac_assoc_info {
> +
> +     struct mutex mutex;
> +
>       /*
>        * This is the requested ESSID. It is written
>        * only by the WX handlers.
> @@ -99,12 +97,13 @@ struct ieee80211softmac_assoc_info {
>        *
>        * bssfixed is used for SIOCSIWAP.
>        */
> -     u8 static_essid:1,
> -        short_preamble_available:1,
> -        associating:1,
> -        assoc_wait:1,
> -        bssvalid:1,
> -        bssfixed:1;
> +     u8 static_essid;
> +     u8 short_preamble_available;
> +     u8 associating;
> +     u8 associated;
> +     u8 assoc_wait;
> +     u8 bssvalid;
> +     u8 bssfixed;
>
>       /* Scan retries remaining */
>       int scan_retry;
> @@ -229,12 +228,10 @@ struct ieee80211softmac_device {
>       /* private stuff follows */
>       /* this lock protects this structure */
>       spinlock_t lock;
> -
> -     /* couple of flags */
> -     u8 scanning:1, /* protects scanning from being done multiple times at
> once */ -        associated:1,
> -        running:1;
> -
> +
> +     u8 running; /* SoftMAC started? */
> +     u8 scanning;
> +
>       struct ieee80211softmac_scaninfo *scaninfo;
>       struct ieee80211softmac_assoc_info associnfo;
>       struct ieee80211softmac_bss_info bssinfo;
> @@ -250,7 +247,7 @@ struct ieee80211softmac_device {
>
>       /* we need to keep a list of network structs we copied */
>       struct list_head network_list;
> -
> +
>       /* This must be the last item so that it points to the data
>        * allocated beyond this structure by alloc_ieee80211 */
>       u8 priv[0];
> @@ -295,7 +292,7 @@ static inline u8 ieee80211softmac_sugges
>  {
>       struct ieee80211softmac_txrates *txrates = &mac->txrates;
>
> -     if (!mac->associated)
> +     if (!mac->associnfo.associated)
>               return txrates->mgt_mcast_rate;
>
>       /* We are associated, sending unicast frame */
> Index: wireless-2.6/net/ieee80211/softmac/ieee80211softmac_assoc.c
> ===================================================================
> ---
> wireless-2.6.orig/net/ieee80211/softmac/ieee80211softmac_assoc.c      
> 2006-09-27
> 19:34:20.000000000 +0200 +++
> wireless-2.6/net/ieee80211/softmac/ieee80211softmac_assoc.c   2006-09-27
> 19:36:39.000000000 +0200 @@ -48,7 +48,7 @@ ieee80211softmac_assoc(struct
> ieee80211s
>       dprintk(KERN_INFO PFX "sent association request!\n");
>
>       spin_lock_irqsave(&mac->lock, flags);
> -     mac->associated = 0; /* just to make sure */
> +     mac->associnfo.associated = 0; /* just to make sure */
>
>       /* Set a timer for timeout */
>       /* FIXME: make timeout configurable */
> @@ -62,24 +62,22 @@ ieee80211softmac_assoc_timeout(void *d)
>  {
>       struct ieee80211softmac_device *mac = (struct ieee80211softmac_device
> *)d; struct ieee80211softmac_network *n;
> -     unsigned long flags;
>
> -     spin_lock_irqsave(&mac->lock, flags);
> +     mutex_lock(&mac->associnfo.mutex);
>       /* we might race against ieee80211softmac_handle_assoc_response,
>        * so make sure only one of us does something */
> -     if (!mac->associnfo.associating) {
> -             spin_unlock_irqrestore(&mac->lock, flags);
> -             return;
> -     }
> +     if (!mac->associnfo.associating)
> +             goto out;
>       mac->associnfo.associating = 0;
>       mac->associnfo.bssvalid = 0;
> -     mac->associated = 0;
> +     mac->associnfo.associated = 0;
>
>       n = ieee80211softmac_get_network_by_bssid_locked(mac,
> mac->associnfo.bssid); -      spin_unlock_irqrestore(&mac->lock, flags);
>
>       dprintk(KERN_INFO PFX "assoc request timed out!\n");
>       ieee80211softmac_call_events(mac,
> IEEE80211SOFTMAC_EVENT_ASSOCIATE_TIMEOUT, n); +out:
> +     mutex_unlock(&mac->associnfo.mutex);
>  }
>
>  void
> @@ -93,7 +91,7 @@ ieee80211softmac_disassoc(struct ieee802
>
>       netif_carrier_off(mac->dev);
>
> -     mac->associated = 0;
> +     mac->associnfo.associated = 0;
>       mac->associnfo.bssvalid = 0;
>       mac->associnfo.associating = 0;
>       ieee80211softmac_init_bss(mac);
> @@ -107,7 +105,7 @@ ieee80211softmac_send_disassoc_req(struc
>  {
>       struct ieee80211softmac_network *found;
>
> -     if (mac->associnfo.bssvalid && mac->associated) {
> +     if (mac->associnfo.bssvalid && mac->associnfo.associated) {
>               found = ieee80211softmac_get_network_by_bssid(mac,
> mac->associnfo.bssid); if (found)
>                       ieee80211softmac_send_mgt_frame(mac, found, 
> IEEE80211_STYPE_DISASSOC,
> reason); @@ -196,17 +194,18 @@ ieee80211softmac_assoc_work(void *d)
>       int bssvalid;
>       unsigned long flags;
>
> +     mutex_lock(&mac->associnfo.mutex);
> +
> +     if (!mac->associnfo.associating)
> +             goto out;
> +
>       /* ieee80211_disassoc might clear this */
>       bssvalid = mac->associnfo.bssvalid;
>
>       /* meh */
> -     if (mac->associated)
> +     if (mac->associnfo.associated)
>               ieee80211softmac_send_disassoc_req(mac,
> WLAN_REASON_DISASSOC_STA_HAS_LEFT);
>
> -     spin_lock_irqsave(&mac->lock, flags);
> -     mac->associnfo.associating = 1;
> -     spin_unlock_irqrestore(&mac->lock, flags);
> -
>       /* try to find the requested network in our list, if we found one 
> already
> */ if (bssvalid || mac->associnfo.bssfixed)
>               found = ieee80211softmac_get_network_by_bssid(mac,
> mac->associnfo.bssid); @@ -260,10 +259,8 @@
> ieee80211softmac_assoc_work(void *d)
>
>       if (!found) {
>               if (mac->associnfo.scan_retry > 0) {
> -                     spin_lock_irqsave(&mac->lock, flags);
>                       mac->associnfo.scan_retry--;
> -                     spin_unlock_irqrestore(&mac->lock, flags);
> -
> +
>                       /* We know of no such network. Let's scan.
>                        * NB: this also happens if we had no memory to copy 
> the network
> info... * Maybe we can hope to have more memory after scanning finishes ;)
> @@ -272,19 +269,17 @@ ieee80211softmac_assoc_work(void *d)
>                       ieee80211softmac_notify(mac->dev, 
> IEEE80211SOFTMAC_EVENT_SCAN_FINISHED,
> ieee80211softmac_assoc_notify_scan, NULL); if
> (ieee80211softmac_start_scan(mac))
>                               dprintk(KERN_INFO PFX "Associate: failed to 
> initiate scan. Is device
> up?\n"); -                    return;
> +                     goto out;
>               } else {
> -                     spin_lock_irqsave(&mac->lock, flags);
>                       mac->associnfo.associating = 0;
> -                     mac->associated = 0;
> -                     spin_unlock_irqrestore(&mac->lock, flags);
> +                     mac->associnfo.associated = 0;
>
>                       dprintk(KERN_INFO PFX "Unable to find matching network 
> after scan!\n");
>                       /* reset the retry counter for the next user request 
> since we
>                        * break out and don't reschedule ourselves after this 
> point. */
>                       mac->associnfo.scan_retry = 
> IEEE80211SOFTMAC_ASSOC_SCAN_RETRY_LIMIT;
>                       ieee80211softmac_call_events(mac,
> IEEE80211SOFTMAC_EVENT_ASSOCIATE_NET_NOT_FOUND, NULL); -                      
> return;
> +                     goto out;
>               }
>       }
>
> @@ -297,7 +292,7 @@ ieee80211softmac_assoc_work(void *d)
>       /* copy the ESSID for displaying it */
>       mac->associnfo.associate_essid.len = found->essid.len;
>       memcpy(mac->associnfo.associate_essid.data, found->essid.data,
> IW_ESSID_MAX_SIZE + 1); -
> +
>       /* we found a network! authenticate (if necessary) and associate to it.
> */ if (found->authenticating) {
>               dprintk(KERN_INFO PFX "Already requested authentication, 
> waiting...\n");
> @@ -305,7 +300,7 @@ ieee80211softmac_assoc_work(void *d)
>                       mac->associnfo.assoc_wait = 1;
>                       ieee80211softmac_notify_internal(mac, 
> IEEE80211SOFTMAC_EVENT_ANY,
> found, ieee80211softmac_assoc_notify_auth, NULL, GFP_KERNEL); }
> -             return;
> +             goto out;
>       }
>       if (!found->authenticated && !found->authenticating) {
>               /* This relies on the fact that _auth_req only queues the work,
> @@ -321,11 +316,14 @@ ieee80211softmac_assoc_work(void *d)
>                       mac->associnfo.assoc_wait = 0;
>                       ieee80211softmac_call_events(mac,
> IEEE80211SOFTMAC_EVENT_ASSOCIATE_FAILED, found); }
> -             return;
> +             goto out;
>       }
>       /* finally! now we can start associating */
>       mac->associnfo.assoc_wait = 0;
>       ieee80211softmac_assoc(mac, found);
> +
> +out:
> +     mutex_unlock(&mac->associnfo.mutex);
>  }
>
>  /* call this to do whatever is necessary when we're associated */
> @@ -341,7 +339,7 @@ ieee80211softmac_associated(struct ieee8
>       mac->bssinfo.supported_rates = net->supported_rates;
>       ieee80211softmac_recalc_txrates(mac);
>
> -     mac->associated = 1;
> +     mac->associnfo.associated = 1;
>
>       mac->associnfo.short_preamble_available =
>               (cap & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0;
> @@ -421,7 +419,7 @@ ieee80211softmac_handle_assoc_response(s
>                       dprintk(KERN_INFO PFX "associating failed (reason: 
> 0x%x)!\n", status);
>                       mac->associnfo.associating = 0;
>                       mac->associnfo.bssvalid = 0;
> -                     mac->associated = 0;
> +                     mac->associnfo.associated = 0;
>                       ieee80211softmac_call_events_locked(mac,
> IEEE80211SOFTMAC_EVENT_ASSOCIATE_FAILED, network); }
>
> Index: wireless-2.6/net/ieee80211/softmac/ieee80211softmac_module.c
> ===================================================================
> ---
> wireless-2.6.orig/net/ieee80211/softmac/ieee80211softmac_module.c     
> 2006-09-2
>7 19:34:20.000000000 +0200 +++
> wireless-2.6/net/ieee80211/softmac/ieee80211softmac_module.c  2006-09-27
> 19:36:39.000000000 +0200 @@ -57,6 +57,7 @@ struct net_device
> *alloc_ieee80211softma
>       INIT_LIST_HEAD(&softmac->network_list);
>       INIT_LIST_HEAD(&softmac->events);
>
> +     mutex_init(&softmac->associnfo.mutex);
>       INIT_WORK(&softmac->associnfo.work, ieee80211softmac_assoc_work,
> softmac); INIT_WORK(&softmac->associnfo.timeout,
> ieee80211softmac_assoc_timeout, softmac); softmac->start_scan =
> ieee80211softmac_start_scan_implementation; Index:
> wireless-2.6/net/ieee80211/softmac/ieee80211softmac_wx.c
> ===================================================================
> ---
> wireless-2.6.orig/net/ieee80211/softmac/ieee80211softmac_wx.c 2006-09-27
> 19:33:27.000000000 +0200 +++
> wireless-2.6/net/ieee80211/softmac/ieee80211softmac_wx.c      2006-09-27
> 19:37:16.000000000 +0200 @@ -73,13 +73,14 @@
> ieee80211softmac_wx_set_essid(struct net
>       struct ieee80211softmac_network *n;
>       struct ieee80211softmac_auth_queue_item *authptr;
>       int length = 0;
> -     unsigned long flags;
> +
> +     mutex_lock(&sm->associnfo.mutex);
>
>       /* Check if we're already associating to this or another network
>        * If it's another network, cancel and start over with our new network
>        * If it's our network, ignore the change, we're already doing it!
>        */
> -     if((sm->associnfo.associating || sm->associated) &&
> +     if((sm->associnfo.associating || sm->associnfo.associated) &&
>          (data->essid.flags && data->essid.length)) {
>               /* Get the associating network */
>               n = ieee80211softmac_get_network_by_bssid(sm, 
> sm->associnfo.bssid);
> @@ -87,10 +88,9 @@ ieee80211softmac_wx_set_essid(struct net
>                  !memcmp(n->essid.data, extra, n->essid.len)) {
>                       dprintk(KERN_INFO PFX "Already associating or 
> associated to
> "MAC_FMT"\n", MAC_ARG(sm->associnfo.bssid));
> -                     return 0;
> +                     goto out;
>               } else {
>                       dprintk(KERN_INFO PFX "Canceling existing associate 
> request!\n");
> -                     spin_lock_irqsave(&sm->lock,flags);
>                       /* Cancel assoc work */
>                       cancel_delayed_work(&sm->associnfo.work);
>                       /* We don't have to do this, but it's a little cleaner 
> */
> @@ -98,14 +98,13 @@ ieee80211softmac_wx_set_essid(struct net
>                               cancel_delayed_work(&authptr->work);
>                       sm->associnfo.bssvalid = 0;
>                       sm->associnfo.bssfixed = 0;
> -                     spin_unlock_irqrestore(&sm->lock,flags);
>                       flush_scheduled_work();
> +                     sm->associnfo.associating = 0;
> +                     sm->associnfo.associated = 0;
>               }
>       }
>
>
> -     spin_lock_irqsave(&sm->lock, flags);
> -
>       sm->associnfo.static_essid = 0;
>       sm->associnfo.assoc_wait = 0;
>
> @@ -121,10 +120,12 @@ ieee80211softmac_wx_set_essid(struct net
>        * If applicable, we have already copied the data in */
>       sm->associnfo.req_essid.len = length;
>
> +     sm->associnfo.associating = 1;
>       /* queue lower level code to do work (if necessary) */
>       schedule_work(&sm->associnfo.work);
> +out:
> +     mutex_unlock(&sm->associnfo.mutex);
>
> -     spin_unlock_irqrestore(&sm->lock, flags);
>       return 0;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_set_essid);
> @@ -136,10 +137,8 @@ ieee80211softmac_wx_get_essid(struct net
>                             char *extra)
>  {
>       struct ieee80211softmac_device *sm = ieee80211_priv(net_dev);
> -     unsigned long flags;
>
> -     /* avoid getting inconsistent information */
> -     spin_lock_irqsave(&sm->lock, flags);
> +     mutex_lock(&sm->associnfo.mutex);
>       /* If all fails, return ANY (empty) */
>       data->essid.length = 0;
>       data->essid.flags = 0;  /* active */
> @@ -152,12 +151,13 @@ ieee80211softmac_wx_get_essid(struct net
>       }
>
>       /* If we're associating/associated, return that */
> -     if (sm->associated || sm->associnfo.associating) {
> +     if (sm->associnfo.associated || sm->associnfo.associating) {
>               data->essid.length = sm->associnfo.associate_essid.len;
>               data->essid.flags = 1;  /* active */
>               memcpy(extra, sm->associnfo.associate_essid.data,
> sm->associnfo.associate_essid.len); }
> -     spin_unlock_irqrestore(&sm->lock, flags);
> +     mutex_unlock(&sm->associnfo.mutex);
> +
>       return 0;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_get_essid);
> @@ -322,15 +322,15 @@ ieee80211softmac_wx_get_wap(struct net_d
>  {
>       struct ieee80211softmac_device *mac = ieee80211_priv(net_dev);
>       int err = 0;
> -     unsigned long flags;
>
> -     spin_lock_irqsave(&mac->lock, flags);
> +     mutex_lock(&mac->associnfo.mutex);
>       if (mac->associnfo.bssvalid)
>               memcpy(data->ap_addr.sa_data, mac->associnfo.bssid, ETH_ALEN);
>       else
>               memset(data->ap_addr.sa_data, 0xff, ETH_ALEN);
>       data->ap_addr.sa_family = ARPHRD_ETHER;
> -     spin_unlock_irqrestore(&mac->lock, flags);
> +     mutex_unlock(&mac->associnfo.mutex);
> +
>       return err;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_get_wap);
> @@ -342,28 +342,27 @@ ieee80211softmac_wx_set_wap(struct net_d
>                           char *extra)
>  {
>       struct ieee80211softmac_device *mac = ieee80211_priv(net_dev);
> -     unsigned long flags;
>
>       /* sanity check */
>       if (data->ap_addr.sa_family != ARPHRD_ETHER) {
>               return -EINVAL;
>       }
>
> -     spin_lock_irqsave(&mac->lock, flags);
> +     mutex_lock(&mac->associnfo.mutex);
>       if (is_broadcast_ether_addr(data->ap_addr.sa_data)) {
>               /* the bssid we have is not to be fixed any longer,
>                * and we should reassociate to the best AP. */
>               mac->associnfo.bssfixed = 0;
>               /* force reassociation */
>               mac->associnfo.bssvalid = 0;
> -             if (mac->associated)
> +             if (mac->associnfo.associated)
>                       schedule_work(&mac->associnfo.work);
>       } else if (is_zero_ether_addr(data->ap_addr.sa_data)) {
>               /* the bssid we have is no longer fixed */
>               mac->associnfo.bssfixed = 0;
>          } else {
>               if (!memcmp(mac->associnfo.bssid, data->ap_addr.sa_data, 
> ETH_ALEN)) {
> -                     if (mac->associnfo.associating || mac->associated) {
> +                     if (mac->associnfo.associating || 
> mac->associnfo.associated) {
>                       /* bssid unchanged and associated or associating - just 
> return */
>                               goto out;
>                       }
> @@ -378,7 +377,8 @@ ieee80211softmac_wx_set_wap(struct net_d
>          }
>
>   out:
> -     spin_unlock_irqrestore(&mac->lock, flags);
> +     mutex_unlock(&mac->associnfo.mutex);
> +
>       return 0;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_set_wap);
> @@ -394,7 +394,8 @@ ieee80211softmac_wx_set_genie(struct net
>       int err = 0;
>       char *buf;
>       int i;
> -
> +
> +     mutex_lock(&mac->associnfo.mutex);
>       spin_lock_irqsave(&mac->lock, flags);
>       /* bleh. shouldn't be locked for that kmalloc... */
>
> @@ -432,6 +433,8 @@ ieee80211softmac_wx_set_genie(struct net
>
>   out:
>       spin_unlock_irqrestore(&mac->lock, flags);
> +     mutex_unlock(&mac->associnfo.mutex);
> +
>       return err;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_set_genie);
> @@ -446,7 +449,8 @@ ieee80211softmac_wx_get_genie(struct net
>       unsigned long flags;
>       int err = 0;
>       int space = wrqu->data.length;
> -
> +
> +     mutex_lock(&mac->associnfo.mutex);
>       spin_lock_irqsave(&mac->lock, flags);
>
>       wrqu->data.length = 0;
> @@ -459,6 +463,8 @@ ieee80211softmac_wx_get_genie(struct net
>                       err = -E2BIG;
>       }
>       spin_unlock_irqrestore(&mac->lock, flags);
> +     mutex_lock(&mac->associnfo.mutex);
> +
>       return err;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_get_genie);
> @@ -473,10 +479,13 @@ ieee80211softmac_wx_set_mlme(struct net_
>       struct iw_mlme *mlme = (struct iw_mlme *)extra;
>       u16 reason = cpu_to_le16(mlme->reason_code);
>       struct ieee80211softmac_network *net;
> +     int err = -EINVAL;
> +
> +     mutex_lock(&mac->associnfo.mutex);
>
>       if (memcmp(mac->associnfo.bssid, mlme->addr.sa_data, ETH_ALEN)) {
>               printk(KERN_DEBUG PFX "wx_set_mlme: requested operation on net 
> we don't
> use\n"); -            return -EINVAL;
> +             goto out;
>       }
>
>       switch (mlme->cmd) {
> @@ -484,14 +493,22 @@ ieee80211softmac_wx_set_mlme(struct net_
>               net = ieee80211softmac_get_network_by_bssid_locked(mac,
> mlme->addr.sa_data); if (!net) {
>                       printk(KERN_DEBUG PFX "wx_set_mlme: we should know the 
> net here...\n");
> -                     return -EINVAL;
> +                     goto out;
>               }
>               return ieee80211softmac_deauth_req(mac, net, reason);
>       case IW_MLME_DISASSOC:
>               ieee80211softmac_send_disassoc_req(mac, reason);
> -             return 0;
> +             mac->associnfo.associated = 0;
> +             mac->associnfo.associating = 0;
> +             err = 0;
> +             goto out;
>       default:
> -             return -EOPNOTSUPP;
> +             err = -EOPNOTSUPP;
>       }
> +
> +out:
> +     mutex_unlock(&mac->associnfo.mutex);
> +
> +     return err;
>  }
>  EXPORT_SYMBOL_GPL(ieee80211softmac_wx_set_mlme);
> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.c
> ===================================================================
> ---
> wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_leds.c 2006-09-27
> 19:34:10.000000000 +0200 +++
> wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_leds.c      2006-09-27
> 19:36:39.000000000 +0200 @@ -242,7 +242,7 @@ void
> bcm43xx_leds_update(struct bcm43xx_
>                       //TODO
>                       break;
>               case BCM43xx_LED_ASSOC:
> -                     if (bcm->softmac->associated)
> +                     if (bcm->softmac->associnfo.associated)
>                               turn_on = 1;
>                       break;
>  #ifdef CONFIG_BCM43XX_DEBUG
> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
> ===================================================================
> --- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_wx.c       
> 2006-09-27
> 19:33:27.000000000 +0200 +++
> wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_wx.c        2006-09-27
> 19:36:39.000000000 +0200 @@ -847,7 +847,7 @@ static struct iw_statistics
> *bcm43xx_get
>       unsigned long flags;
>
>       wstats = &bcm->stats.wstats;
> -     if (!mac->associated) {
> +     if (!mac->associnfo.associated) {
>               wstats->miss.beacon = 0;
>  //           bcm->ieee->ieee_stats.tx_retry_limit_exceeded = 0; // FIXME: 
> should
> this be cleared here? wstats->discard.retries = 0;
> Index: wireless-2.6/net/ieee80211/softmac/ieee80211softmac_io.c
> ===================================================================
> ---
> wireless-2.6.orig/net/ieee80211/softmac/ieee80211softmac_io.c 2006-09-27
> 19:34:20.000000000 +0200 +++
> wireless-2.6/net/ieee80211/softmac/ieee80211softmac_io.c      2006-09-27
> 19:36:39.000000000 +0200 @@ -475,8 +475,13 @@ int
> ieee80211softmac_handle_beacon(struc
>  {
>       struct ieee80211softmac_device *mac = ieee80211_priv(dev);
>
> -     if (mac->associated && memcmp(network->bssid, mac->associnfo.bssid,
> ETH_ALEN) == 0) -             ieee80211softmac_process_erp(mac, 
> network->erp_value);
> +     /* This might race, but we don't really care and it's not worth
> +      * adding heavyweight locking in this fastpath.
> +      */
> +     if (mac->associnfo.associated) {
> +             if (memcmp(network->bssid, mac->associnfo.bssid, ETH_ALEN) == 0)
> +                     ieee80211softmac_process_erp(mac, network->erp_value);
> +     }
>
>       return 0;
>  }
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to