From f6e179360940569a25dea128759e6139e9916bbe Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 16 Jan 2013 08:27:12 -0500 Subject: [PATCH] Add patch from Stanislaw Gruszka to fix iwlegacy IBSS cleanup (rhbz 886946) --- iwlegacy-fix-IBSS-cleanup.patch | 104 ++++++++++++++++++++++++++++++++ kernel.spec | 11 +++- 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 iwlegacy-fix-IBSS-cleanup.patch diff --git a/iwlegacy-fix-IBSS-cleanup.patch b/iwlegacy-fix-IBSS-cleanup.patch new file mode 100644 index 000000000..5533aed75 --- /dev/null +++ b/iwlegacy-fix-IBSS-cleanup.patch @@ -0,0 +1,104 @@ +From 658f1bd2dd632209df00ec66349e15941ffdd83b Mon Sep 17 00:00:00 2001 +From: Stanislaw Gruszka +Date: Wed, 16 Jan 2013 10:28:09 +0000 +Subject: [PATCH 3.8] iwlegacy: fix IBSS cleanup + +We do not correctly change interface type when switching from +IBSS mode to STA mode, that results in microcode errors. + +Resolves: +https://bugzilla.redhat.com/show_bug.cgi?id=886946 + +Reported-by: Jaroslav Skarvada +Cc: stable@vger.kernel.org +Signed-off-by: Stanislaw Gruszka +--- + drivers/net/wireless/iwlegacy/common.c | 35 ++++++++++++++-------------------- + 1 file changed, 14 insertions(+), 21 deletions(-) + +diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c +index 7e16d10..90b8970 100644 +--- a/drivers/net/wireless/iwlegacy/common.c ++++ b/drivers/net/wireless/iwlegacy/common.c +@@ -3958,17 +3958,21 @@ il_connection_init_rx_config(struct il_priv *il) + + memset(&il->staging, 0, sizeof(il->staging)); + +- if (!il->vif) { ++ switch (il->iw_mode) { ++ case NL80211_IFTYPE_UNSPECIFIED: + il->staging.dev_type = RXON_DEV_TYPE_ESS; +- } else if (il->vif->type == NL80211_IFTYPE_STATION) { ++ break; ++ case NL80211_IFTYPE_STATION: + il->staging.dev_type = RXON_DEV_TYPE_ESS; + il->staging.filter_flags = RXON_FILTER_ACCEPT_GRP_MSK; +- } else if (il->vif->type == NL80211_IFTYPE_ADHOC) { ++ break; ++ case NL80211_IFTYPE_ADHOC: + il->staging.dev_type = RXON_DEV_TYPE_IBSS; + il->staging.flags = RXON_FLG_SHORT_PREAMBLE_MSK; + il->staging.filter_flags = + RXON_FILTER_BCON_AWARE_MSK | RXON_FILTER_ACCEPT_GRP_MSK; +- } else { ++ break; ++ default: + IL_ERR("Unsupported interface type %d\n", il->vif->type); + return; + } +@@ -4550,8 +4554,7 @@ out: + EXPORT_SYMBOL(il_mac_add_interface); + + static void +-il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif, +- bool mode_change) ++il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif) + { + lockdep_assert_held(&il->mutex); + +@@ -4560,9 +4563,7 @@ il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif, + il_force_scan_end(il); + } + +- if (!mode_change) +- il_set_mode(il); +- ++ il_set_mode(il); + } + + void +@@ -4575,8 +4576,8 @@ il_mac_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) + + WARN_ON(il->vif != vif); + il->vif = NULL; +- +- il_teardown_interface(il, vif, false); ++ il->iw_mode = NL80211_IFTYPE_UNSPECIFIED; ++ il_teardown_interface(il, vif); + memset(il->bssid, 0, ETH_ALEN); + + D_MAC80211("leave\n"); +@@ -4685,18 +4686,10 @@ il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, + } + + /* success */ +- il_teardown_interface(il, vif, true); + vif->type = newtype; + vif->p2p = false; +- err = il_set_mode(il); +- WARN_ON(err); +- /* +- * We've switched internally, but submitting to the +- * device may have failed for some reason. Mask this +- * error, because otherwise mac80211 will not switch +- * (and set the interface type back) and we'll be +- * out of sync with it. +- */ ++ il->iw_mode = newtype; ++ il_teardown_interface(il, vif); + err = 0; + + out: +-- +1.8.0.2 + diff --git a/kernel.spec b/kernel.spec index 426e8c629..9cefbdccd 100644 --- a/kernel.spec +++ b/kernel.spec @@ -62,7 +62,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 1 +%global baserelease 2 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -736,6 +736,9 @@ Patch22070: irqnr-build.patch #rhbz 859485 Patch21226: vt-Drop-K_OFF-for-VC_MUTE.patch +#rhbz 886946 +Patch21227: iwlegacy-fix-IBSS-cleanup.patch + # END OF PATCH DEFINITIONS %endif @@ -1418,6 +1421,9 @@ ApplyPatch irqnr-build.patch #rhbz 859485 ApplyPatch vt-Drop-K_OFF-for-VC_MUTE.patch +#rhbz 886946 +ApplyPatch iwlegacy-fix-IBSS-cleanup.patch + # END OF PATCH APPLICATIONS %endif @@ -2286,6 +2292,9 @@ fi # ||----w | # || || %changelog +* Wed Jan 16 2013 Josh Boyer +- Add patch from Stanislaw Gruszka to fix iwlegacy IBSS cleanup (rhbz 886946) + * Tue Jan 15 2013 Justin M. Forbes - 3.8.0-0.rc3.git2.1 - Linux v3.8-rc3-293-g406089d