From b798df3e960f6bcb4910a4bee447ccadc0bb7d97 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 7 Nov 2014 11:12:51 +0000 Subject: mac80211: merge a few pending upstream fixes Signed-off-by: Felix Fietkau git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43208 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...k-fix-regression-in-bssidmask-calculation.patch | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 package/kernel/mac80211/patches/351-ath9k-fix-regression-in-bssidmask-calculation.patch (limited to 'package/kernel/mac80211/patches/351-ath9k-fix-regression-in-bssidmask-calculation.patch') diff --git a/package/kernel/mac80211/patches/351-ath9k-fix-regression-in-bssidmask-calculation.patch b/package/kernel/mac80211/patches/351-ath9k-fix-regression-in-bssidmask-calculation.patch new file mode 100644 index 0000000000..d5963925dc --- /dev/null +++ b/package/kernel/mac80211/patches/351-ath9k-fix-regression-in-bssidmask-calculation.patch @@ -0,0 +1,70 @@ +From: Ben Greear +Date: Tue, 4 Nov 2014 15:22:50 -0800 +Subject: [PATCH] ath9k: fix regression in bssidmask calculation + +The commit that went into 3.17: + + ath9k: Summarize hw state per channel context + + Group and set hw state (opmode, primary_sta, beacon conf) per + channel context instead of whole list of vifs. This would allow + each channel context to run in different mode (STA/AP). + + Signed-off-by: Felix Fietkau + Signed-off-by: Rajkumar Manoharan + Signed-off-by: John W. Linville + +broke multi-vif configuration due to not properly calculating +the bssid mask. + +The test case that caught this was: + + create wlan0 and sta0-4 (6 total), not sure how much that matters. + associate all 6 (works fine) + disconnect 5 of them, leaving sta0 up + Start trying to bring up the other 5 one at a time. It will + fail, with iw events looking like this (in these logs, several + sta are trying to come up, but symptom is the same with just one) + +The patch causing the regression made quite a few changes, but +the part I think caused this particular problem was not +recalculating the bssid mask when adding and removing interfaces. + +Re-adding those calls fixes my test case. Fix bad comment +as well. + +Signed-off-by: Ben Greear +--- + +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -994,9 +994,8 @@ void ath9k_calculate_iter_data(struct at + struct ath_vif *avp; + + /* +- * Pick the MAC address of the first interface as the new hardware +- * MAC address. The hardware will use it together with the BSSID mask +- * when matching addresses. ++ * The hardware will use primary station addr together with the ++ * BSSID mask when matching addresses. + */ + memset(iter_data, 0, sizeof(*iter_data)); + memset(&iter_data->mask, 0xff, ETH_ALEN); +@@ -1225,6 +1224,8 @@ static int ath9k_add_interface(struct ie + list_add_tail(&avp->list, &avp->chanctx->vifs); + } + ++ ath9k_calculate_summary_state(sc, avp->chanctx); ++ + ath9k_assign_hw_queues(hw, vif); + + an->sc = sc; +@@ -1294,6 +1295,8 @@ static void ath9k_remove_interface(struc + + ath_tx_node_cleanup(sc, &avp->mcast_node); + ++ ath9k_calculate_summary_state(sc, avp->chanctx); ++ + mutex_unlock(&sc->mutex); + } + -- cgit v1.2.3