summaryrefslogtreecommitdiffstats
path: root/0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2013-10-09 10:28:35 -0400
committerJosh Boyer <jwboyer@fedoraproject.org>2013-10-09 10:29:38 -0400
commitb817316a0e458997d10a704d5463a710338de111 (patch)
treef1964a98d38f62da703ad03ca9824c23c6cdda77 /0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
parent821590a9f242e2159a7fc89a674bf8faa07fe92f (diff)
downloadkernel-b817316a0e458997d10a704d5463a710338de111.tar.gz
kernel-b817316a0e458997d10a704d5463a710338de111.tar.xz
kernel-b817316a0e458997d10a704d5463a710338de111.zip
Don't trigger a stack trace on crashing iwlwifi firmware (rhbz 896695)
Diffstat (limited to '0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch')
-rw-r--r--0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch b/0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
new file mode 100644
index 000000000..499c34a63
--- /dev/null
+++ b/0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
@@ -0,0 +1,98 @@
+From 3efd689c41080b0d4a9cc263a51f2868e3d5a37b Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 9 Oct 2013 15:03:57 +0200
+Subject: [PATCH] iwlwifi: don't WARN on bad firmware state
+
+When we restart firmware is possible and hance firmware is marked as not
+alive, we can still get calls from mac80211. Don't WARN on in this
+situation as this triggers automatic bug reports with no valuable
+information.
+
+This extend change from:
+
+commit 8ca95995e64f5d270889badb3e449dca91106a2b
+Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Sun Sep 15 11:37:17 2013 +0300
+
+ iwlwifi: don't WARN on host commands sent when firmware is dead
+
+which remove WARN_ONCE from one place, but those warnings are also
+triggered from other functions.
+
+Patch adds also unlikely() statement.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+---
+ drivers/net/wireless/iwlwifi/iwl-trans.h | 22 +++++++++++-----------
+ 1 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
+index 80b4750..c6bac7c 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
++++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
+@@ -601,7 +601,7 @@ static inline int iwl_trans_send_cmd(struct iwl_trans *trans,
+ {
+ int ret;
+
+- if (trans->state != IWL_TRANS_FW_ALIVE) {
++ if (unlikely(trans->state != IWL_TRANS_FW_ALIVE)) {
+ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+ return -EIO;
+ }
+@@ -640,8 +640,8 @@ static inline void iwl_trans_free_tx_cmd(struct iwl_trans *trans,
+ static inline int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb,
+ struct iwl_device_cmd *dev_cmd, int queue)
+ {
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (unlikely(trans->state != IWL_TRANS_FW_ALIVE))
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+
+ return trans->ops->tx(trans, skb, dev_cmd, queue);
+ }
+@@ -649,16 +649,16 @@ static inline int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb,
+ static inline void iwl_trans_reclaim(struct iwl_trans *trans, int queue,
+ int ssn, struct sk_buff_head *skbs)
+ {
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (unlikely(trans->state != IWL_TRANS_FW_ALIVE))
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+
+ trans->ops->reclaim(trans, queue, ssn, skbs);
+ }
+
+ static inline void iwl_trans_txq_disable(struct iwl_trans *trans, int queue)
+ {
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (unlikely(trans->state != IWL_TRANS_FW_ALIVE))
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+
+ trans->ops->txq_disable(trans, queue);
+ }
+@@ -669,8 +669,8 @@ static inline void iwl_trans_txq_enable(struct iwl_trans *trans, int queue,
+ {
+ might_sleep();
+
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (unlikely((trans->state != IWL_TRANS_FW_ALIVE)))
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+
+ trans->ops->txq_enable(trans, queue, fifo, sta_id, tid,
+ frame_limit, ssn);
+@@ -685,8 +685,8 @@ static inline void iwl_trans_ac_txq_enable(struct iwl_trans *trans, int queue,
+
+ static inline int iwl_trans_wait_tx_queue_empty(struct iwl_trans *trans)
+ {
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (unlikely(trans->state != IWL_TRANS_FW_ALIVE))
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
+
+ return trans->ops->wait_tx_queue_empty(trans);
+ }
+--
+1.7.1
+