ath9k: add a RCU related bugfix
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -0,0 +1,65 @@ | |||||||
|  | From: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de> | ||||||
|  | Date: Mon, 12 Dec 2016 19:50:01 +0100 | ||||||
|  | Subject: [PATCH] ath9k: unlock rcu read when returning early | ||||||
|  |  | ||||||
|  | Starting with ath9k: use ieee80211_tx_status_noskb where possible | ||||||
|  | [d94a461d7a7df68991fb9663531173f60ef89c68] the driver uses rcu_read_lock() && | ||||||
|  | rcu_read_unlock() yet on returning early in ath_tx_edma_tasklet() the unlock is | ||||||
|  | missing leading to stalls and suspicious RCU usage: | ||||||
|  |  | ||||||
|  |  =============================== | ||||||
|  |  [ INFO: suspicious RCU usage. ] | ||||||
|  |  4.9.0-rc8 #11 Not tainted | ||||||
|  |  ------------------------------- | ||||||
|  |  kernel/rcu/tree.c:705 Illegal idle entry in RCU read-side critical section.! | ||||||
|  |  | ||||||
|  |  other info that might help us debug this: | ||||||
|  |  | ||||||
|  |  RCU used illegally from idle CPU! | ||||||
|  |  rcu_scheduler_active = 1, debug_locks = 0 | ||||||
|  |  RCU used illegally from extended quiescent state! | ||||||
|  |  1 lock held by swapper/7/0: | ||||||
|  |  #0: | ||||||
|  |   ( | ||||||
|  |  rcu_read_lock | ||||||
|  |  ){......} | ||||||
|  |  , at: | ||||||
|  |  [<ffffffffa06ed110>] ath_tx_edma_tasklet+0x0/0x450 [ath9k] | ||||||
|  |  | ||||||
|  |  stack backtrace: | ||||||
|  |  CPU: 7 PID: 0 Comm: swapper/7 Not tainted 4.9.0-rc8 #11 | ||||||
|  |  Hardware name: Acer Aspire V3-571G/VA50_HC_CR, BIOS V2.21 12/16/2013 | ||||||
|  |   ffff88025efc3f38 ffffffff8132b1e5 ffff88017ede4540 0000000000000001 | ||||||
|  |   ffff88025efc3f68 ffffffff810a25f7 ffff88025efcee60 ffff88017edebdd8 | ||||||
|  |   ffff88025eeb5400 0000000000000091 ffff88025efc3f88 ffffffff810c3cd4 | ||||||
|  |  Call Trace: | ||||||
|  |   <IRQ> | ||||||
|  |   [<ffffffff8132b1e5>] dump_stack+0x68/0x93 | ||||||
|  |   [<ffffffff810a25f7>] lockdep_rcu_suspicious+0xd7/0x110 | ||||||
|  |   [<ffffffff810c3cd4>] rcu_eqs_enter_common.constprop.85+0x154/0x200 | ||||||
|  |   [<ffffffff810c5a54>] rcu_irq_exit+0x44/0xa0 | ||||||
|  |   [<ffffffff81058631>] irq_exit+0x61/0xd0 | ||||||
|  |   [<ffffffff81018d25>] do_IRQ+0x65/0x110 | ||||||
|  |   [<ffffffff81672189>] common_interrupt+0x89/0x89 | ||||||
|  |   <EOI> | ||||||
|  |   [<ffffffff814ffe11>] ? cpuidle_enter_state+0x151/0x200 | ||||||
|  |   [<ffffffff814ffee2>] cpuidle_enter+0x12/0x20 | ||||||
|  |   [<ffffffff8109a6ae>] call_cpuidle+0x1e/0x40 | ||||||
|  |   [<ffffffff8109a8f6>] cpu_startup_entry+0x146/0x220 | ||||||
|  |   [<ffffffff810336f8>] start_secondary+0x148/0x170 | ||||||
|  |  | ||||||
|  | Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de> | ||||||
|  | Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | --- a/drivers/net/wireless/ath/ath9k/xmit.c | ||||||
|  | +++ b/drivers/net/wireless/ath/ath9k/xmit.c | ||||||
|  | @@ -2757,7 +2757,7 @@ void ath_tx_edma_tasklet(struct ath_soft | ||||||
|  |  		fifo_list = &txq->txq_fifo[txq->txq_tailidx]; | ||||||
|  |  		if (list_empty(fifo_list)) { | ||||||
|  |  			ath_txq_unlock(sc, txq); | ||||||
|  | -			return; | ||||||
|  | +			break; | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  |  		bf = list_first_entry(fifo_list, struct ath_buf, list); | ||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau