Skip to contentSkip to conversation

minstrel_ht: fix freeze with legacy hardware

PATCH In review Christian Lamparter 2 participants 3 messages Jul 14, 2010 – Jul 16, 2010 mac80211

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 minstrel_ht: fix freeze with legacy hardware

Ever since minstrel_ht was prompted to be the default RC, I had an this odd freeze in ieee80211_tx_status, whenever I tried to connect my p54*(legacy 11abg) to a 802.11n network.

Apparently, minstrel_ht was not interested if the hardware supported 802.11n or not?

---
Note: There's another possible way to fix this. We can simply AND sta's ht_supported bool with the setting in sband's ht_supported.

The advantage is that we won't need this patch and the procedure would "match" to what we did with the ht_cap flags.

This is up for debate... But in the meantime,
here's a fix.

P.S.: is there a valid operation situation
where sta is be NULL, but priv_sta isn't?
---

net/mac80211/rc80211_minstrel_ht.c +6 -2
index b5ace24..8ad3630 100644
@@ -635,8 +635,12 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband,
 	int stbc;
 	int i;
 
-	/* fall back to the old minstrel for legacy stations */
-	if (sta && !sta->ht_cap.ht_supported) {
+	/*
+	 * fall back to the old minstrel for legacy stations,
+	 * or on legacy hardware.
+	 */
+	if ((sta && !sta->ht_cap.ht_supported) ||
+	    !sband->ht_cap.ht_supported) {
 		msp->is_ht = false;
 		memset(&msp->legacy, 0, sizeof(msp->legacy));
 		msp->legacy.r = msp->ratelist;
#1 lore raw
Quoted 18 lines · Christian Lamparter

Ever since minstrel_ht was prompted to be the default RC, I had an this odd freeze in ieee80211_tx_status, whenever I tried to connect my p54*(legacy 11abg) to a 802.11n network.

Apparently, minstrel_ht was not interested if the hardware supported 802.11n or not?

---
Note: There's another possible way to fix this. We can simply AND sta's ht_supported bool with the setting in sband's ht_supported.

The advantage is that we won't need this patch and the procedure would "match" to what we did with the ht_cap flags.

Quoted 5 lines

This is up for debate... But in the meantime,
here's a fix.

P.S.: is there a valid operation situation
where sta is be NULL, but priv_sta isn't?

Either of those two options is OK with me. I would prefer masking it in mac80211 though, since the sta ht setting are already partially masked by hw capabilities.

- Felix

#2 lore raw

PATCH 1/1 mac80211: skip HT parsing if HW does not support HT

This patch will also fix the odd freeze which occurred when minstrel_ht connects to an 802.11n network with legacy hardware.

---
John,

As you know Felix has favored the alternative. Therefore, can you please ignore
[PATCH] minstrel_ht: fix freeze with legacy hardware and use this one instead?

Regards,
Chr
---

net/mac80211/ht.c +1 -1
index be928ef..9d101fb 100644
@@ -29,7 +29,7 @@ void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband,
 
 	memset(ht_cap, 0, sizeof(*ht_cap));
 
-	if (!ht_cap_ie)
+	if (!ht_cap_ie || !sband->ht_cap.ht_supported)
 		return;
 
 	ht_cap->ht_supported = true;