On Tue, 2009-11-24 at 09:05 -0800, Adam Wozniak wrote: > Previously, not all code paths set supp_rates, and a rate change did not reinitialize the rate control layer. > This patch fixes those issues. (Hopefully not whitespace damaged this time) All my other comments still stand. johannes > Signed-off-by: Adam Wozniak <awozniak@xxxxxxxxxx> > --- > diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c > index 10d1385..474f66d 100644 > --- a/net/mac80211/ibss.c > +++ b/net/mac80211/ibss.c > @@ -246,9 +246,13 @@ static void ieee80211_rx_bss_info(struct > ieee80211_sub_if_data *sdata, > if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) > return; > > + supp_rates = ieee80211_sta_get_rates(local, elems, band); > + > + /* make sure mandatory rates are always added */ > + supp_rates |= ieee80211_mandatory_rates(local, band); > + > if (sdata->vif.type == NL80211_IFTYPE_ADHOC && elems->supp_rates && > memcmp(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0) { > - supp_rates = ieee80211_sta_get_rates(local, elems, band); > > rcu_read_lock(); > > @@ -257,12 +261,10 @@ static void ieee80211_rx_bss_info(struct > ieee80211_sub_if_data *sdata, > u32 prev_rates; > > prev_rates = sta->sta.supp_rates[band]; > - /* make sure mandatory rates are always added */ > - sta->sta.supp_rates[band] = supp_rates | > - ieee80211_mandatory_rates(local, band); > + sta->sta.supp_rates[band] = supp_rates; > > + if (sta->sta.supp_rates[band] != prev_rates) { > #ifdef CONFIG_MAC80211_IBSS_DEBUG > - if (sta->sta.supp_rates[band] != prev_rates) > printk(KERN_DEBUG "%s: updated supp_rates set " > "for %pM based on beacon info (0x%llx | " > "0x%llx -> 0x%llx)\n", > @@ -272,6 +274,8 @@ static void ieee80211_rx_bss_info(struct > ieee80211_sub_if_data *sdata, > (unsigned long long) supp_rates, > (unsigned long long) sta->sta.supp_rates[band]); > #endif > + rate_control_rate_init(sta); > + } > } else > ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, supp_rates); > > @@ -415,6 +419,15 @@ struct sta_info *ieee80211_ibss_add_sta(struct > ieee80211_sub_if_data *sdata, > sta->sta.supp_rates[band] = supp_rates | > ieee80211_mandatory_rates(local, band); > > +#ifdef CONFIG_MAC80211_IBSS_DEBUG > + printk(KERN_DEBUG "%s: initialized supp_rates set " > + "for %pM (0x%llx) (band %d)\n", > + sdata->dev->name, > + sta->sta.addr, > + (unsigned long long) sta->sta.supp_rates[band], > + band); > +#endif > + > rate_control_rate_init(sta); > > if (sta_info_insert(sta)) > >
Attachment:
signature.asc
Description: This is a digitally signed message part