[kernel/f20] Add patch from Stanislaw Gruszka to fix ath9k BUG (rhbz 990955)

Josh Boyer jwboyer at fedoraproject.org
Tue Jan 28 15:28:56 UTC 2014


commit d26fc94f797c3e4ac13188058ad12bb63c865a01
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Tue Jan 28 10:08:41 2014 -0500

    Add patch from Stanislaw Gruszka to fix ath9k BUG (rhbz 990955)

 ...-make-sta_rc_update-atomic-for-most-calls.patch |   65 ++++++++++++++++++++
 kernel.spec                                        |    9 +++
 2 files changed, 74 insertions(+), 0 deletions(-)
---
diff --git a/ath9k_htc-make-sta_rc_update-atomic-for-most-calls.patch b/ath9k_htc-make-sta_rc_update-atomic-for-most-calls.patch
new file mode 100644
index 0000000..bbfd578
--- /dev/null
+++ b/ath9k_htc-make-sta_rc_update-atomic-for-most-calls.patch
@@ -0,0 +1,65 @@
+Bugzilla: 990955
+Upstream-status: Sent for 3.14, CC'd to stable
+
+sta_rc_update() callback must be atomic, hence we can not take mutexes
+or do other operations, which can sleep in ath9k_htc_sta_rc_update().
+
+I think we can just return from ath9k_htc_sta_rc_update(), if it is
+called without IEEE80211_RC_SUPP_RATES_CHANGED bit. That will help 
+with scheduling while atomic bug for most cases (except mesh and IBSS
+modes).
+
+For mesh and IBSS I do not see other solution like creating additional
+workqueue, because sending firmware command require us to sleep, but
+this can be done in additional patch.
+
+Patch partially fixes bug:
+https://bugzilla.redhat.com/show_bug.cgi?id=990955
+
+Cc: stable at vger.kernel.org
+Signed-off-by: Stanislaw Gruszka <sgruszka at redhat.com>
+---
+ drivers/net/wireless/ath/ath9k/htc_drv_main.c | 25 +++++++++++++------------
+ 1 file changed, 13 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+index 608d739..a57af9b 100644
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+@@ -1315,21 +1315,22 @@ static void ath9k_htc_sta_rc_update(struct ieee80211_hw *hw,
+ 	struct ath_common *common = ath9k_hw_common(priv->ah);
+ 	struct ath9k_htc_target_rate trate;
+ 
++	if (!(changed & IEEE80211_RC_SUPP_RATES_CHANGED))
++		return;
++
+ 	mutex_lock(&priv->mutex);
+ 	ath9k_htc_ps_wakeup(priv);
+ 
+-	if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
+-		memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
+-		ath9k_htc_setup_rate(priv, sta, &trate);
+-		if (!ath9k_htc_send_rate_cmd(priv, &trate))
+-			ath_dbg(common, CONFIG,
+-				"Supported rates for sta: %pM updated, rate caps: 0x%X\n",
+-				sta->addr, be32_to_cpu(trate.capflags));
+-		else
+-			ath_dbg(common, CONFIG,
+-				"Unable to update supported rates for sta: %pM\n",
+-				sta->addr);
+-	}
++	memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
++	ath9k_htc_setup_rate(priv, sta, &trate);
++	if (!ath9k_htc_send_rate_cmd(priv, &trate))
++		ath_dbg(common, CONFIG,
++			"Supported rates for sta: %pM updated, rate caps: 0x%X\n",
++			sta->addr, be32_to_cpu(trate.capflags));
++	else
++		ath_dbg(common, CONFIG,
++			"Unable to update supported rates for sta: %pM\n",
++			sta->addr);
+ 
+ 	ath9k_htc_ps_restore(priv);
+ 	mutex_unlock(&priv->mutex);
+-- 
+1.7.11.7
diff --git a/kernel.spec b/kernel.spec
index 0bb382b..46feab1 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -760,6 +760,9 @@ Patch25183: ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.pa
 #rhbz 1057533
 Patch25184: i915-remove-pm_qos-request-on-error.patch
 
+#rhbz 990955
+Patch25185: ath9k_htc-make-sta_rc_update-atomic-for-most-calls.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1475,6 +1478,9 @@ ApplyPatch ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.pat
 #rhbz 1057533
 ApplyPatch i915-remove-pm_qos-request-on-error.patch
 
+#rhbz 990955
+ApplyPatch ath9k_htc-make-sta_rc_update-atomic-for-most-calls.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2277,6 +2283,9 @@ fi
 #                 ||----w |
 #                 ||     ||
 %changelog
+* Tue Jan 28 2014 Josh Boyer <jwboyer at fedoraproject.org>
+- Add patch from Stanislaw Gruszka to fix ath9k BUG (rhbz 990955)
+
 * Mon Jan 27 2014 Justin M. Forbes <jforbes at fedoraproject.org> - 3.12.9-300
 - Backport new IPv6 address flag IFA_F_NOPREFIXROUTE and IFA_F_MANAGETEMPADDR (rhbz 1056711)
 - Linux v3.12.9


More information about the scm-commits mailing list