b43: fix the wrong assignment of status.freq in b43_rx()
PATCH v4 1/2 b43: fix the wrong assignment of status.freq in b43_rx()
Use the right function to update frequency value.
If rx skb is probe response or beacon, the wrong frequency value can cause problem that bss info can't be updated when it should be.
and driver conversion")
---
v4: change commit message
suggested by Johannes Berg
drivers/net/wireless/b43/xmit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/b43/xmit.c +2 -2
@@ -821,10 +821,10 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)* channel number in b43. */ if (chanstat &B43_RX_CHAN_5GHZ ) { status.band =IEEE80211_BAND_5GHZ ; - status.freq =b43_freq_to_channel_5ghz (chanid); + status.freq =b43_channel_to_freq_5ghz (chanid); }else { status.band =IEEE80211_BAND_2GHZ ; - status.freq =b43_freq_to_channel_2ghz (chanid); + status.freq =b43_channel_to_freq_2ghz (chanid); }break ;default :
Signature · 1 line
1.8.4.2
PATCH v4 2/2 b43: use kernel api to replace b43 specific helper function
Use ieee80211_channel_to_frequency() to replace b43_channel_to_freq_{2,5}ghz(), and remove unused b43_freq_to_channel_{2,5}ghz().
---
v4: bump version to consistent with first patch.
drivers/net/wireless/b43/main.h | 35 ----------------------------------- drivers/net/wireless/b43/xmit.c | 12 ++++++------ 2 files changed, 6 insertions(+), 41 deletions(-)
drivers/net/wireless/b43/main.h +0 -35
@@ -58,41 +58,6 @@ enum b43_verbosity {#endif }; - -/* Lightweight function to convert a frequency (in Mhz) to a channel number. */ -static inline u8 b43_freq_to_channel_5ghz (int freq) -{ -return ((freq -5000 ) /5 ); -} -static inline u8 b43_freq_to_channel_2ghz (int freq) -{ -u8 channel; - -if (freq ==2484 ) - channel =14 ; -else - channel = (freq -2407 ) /5 ; - -return channel; -} - -/* Lightweight function to convert a channel number to a frequency (in Mhz). */ -static inline int b43_channel_to_freq_5ghz (u8 channel) -{ -return (5000 + (5 * channel)); -} -static inline int b43_channel_to_freq_2ghz (u8 channel) -{ -int freq; - -if (channel ==14 ) - freq =2484 ; -else - freq =2407 + (5 * channel); - -return freq; -} -static inline int b43_is_cck_rate (int rate) { return (rate == B43_CCK_RATE_1MB ||
drivers/net/wireless/b43/xmit.c +6 -6
@@ -806,7 +806,8 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)B43_WARN_ON (1 );/* FIXME: We don't really know which value the "chanid" contains. * So the following assignment might be wrong. */ - status.freq =b43_channel_to_freq_5ghz (chanid); + status.freq = +ieee80211_channel_to_frequency (chanid, status.band);break ;case B43_PHYTYPE_G : status.band =IEEE80211_BAND_2GHZ ;
@@ -819,13 +820,12 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)case B43_PHYTYPE_HT :/* chanid is the SHM channel cookie. Which is the plain * channel number in b43. */ -if (chanstat &B43_RX_CHAN_5GHZ ) { +if (chanstat &B43_RX_CHAN_5GHZ ) status.band =IEEE80211_BAND_5GHZ ; - status.freq =b43_channel_to_freq_5ghz (chanid); - }else { +else status.band =IEEE80211_BAND_2GHZ ; - status.freq =b43_channel_to_freq_2ghz (chanid); - } + status.freq = +ieee80211_channel_to_frequency (chanid, status.band);break ;default :B43_WARN_ON (1 );
Signature · 1 line
1.8.4.2
PATCH v4 1/2 b43: fix the wrong assignment of status.freq in b43_rx()
In reply to ZHAO GangQuoted 10 lines · ZHAO Gang
Use the right function to update frequency value.
If rx skb is probe response or beacon, the wrong frequency value can cause problem that bss info can't be updated when it should be.
Cc <[email protected]>Fixes 8318d78a44d4 ("cfg80211 API for channels/bitrates, mac80211and driver conversion")
Signed-off-by ZHAO Gang <[email protected]>---
This patch seems to fix a problem that caused scanning under NetworkManager to fail. The symptom was that no available networks were seen in the NM applet after a connection was made. Now the available AP list remains populated.
Larry
PATCH v4 1/2 b43: fix the wrong assignment of status.freq in b43_rx()
In reply to ZHAO Gang2014/1/17 ZHAO Gang <[email protected]>:
Quoted 4 lines
Use the right function to update frequency value.
If rx skb is probe response or beacon, the wrong frequency value can cause problem that bss info can't be updated when it should be.
Zhao: this fix is great. My development machine was running some ancient distro with kernel 2.6.22, so I couldn't test it earlier.
For a long time I got problem with finding AP on channel 13. I reported it in:
cfg80211: use DS or HT operation IEs to determine BSS channel"
I did 10 tests *without* your patch. wpa_supplicant had to scan 43, 33, 7, 2, 46, 12, 7, 32, 6, 6 times to find my AP on channel 13. With your patch wpa_supplicant finds it in scanning results after the first try!
Thanks a lot for finding and fixing it!
[0] http://lists.infradead.org/pipermail/b43-dev/2013-March/003003.html