Re: [PATCH v2] ath9k: do not return early to fix rcu unlocking
On 2016-12-13 18:08, Tobias Klausmann wrote: > Starting with commit d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb > where possible") 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: > [] 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 > 88025efc3f38 8132b1e5 88017ede4540 0001 > 88025efc3f68 810a25f7 88025efcee60 88017edebdd8 > 88025eeb5400 0091 88025efc3f88 810c3cd4 > Call Trace: > > [] dump_stack+0x68/0x93 > [] lockdep_rcu_suspicious+0xd7/0x110 > [] rcu_eqs_enter_common.constprop.85+0x154/0x200 > [] rcu_irq_exit+0x44/0xa0 > [] irq_exit+0x61/0xd0 > [] do_IRQ+0x65/0x110 > [] common_interrupt+0x89/0x89 > > [] ? cpuidle_enter_state+0x151/0x200 > [] cpuidle_enter+0x12/0x20 > [] call_cpuidle+0x1e/0x40 > [] cpu_startup_entry+0x146/0x220 > [] start_secondary+0x148/0x170 > > Signed-off-by: Tobias Klausmann> Fixes: d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") > Cc: # v4.9 Acked-by: Felix Fietkau
Re: [PATCH v2] ath9k: do not return early to fix rcu unlocking
On 2016-12-13 18:08, Tobias Klausmann wrote: > Starting with commit d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb > where possible") 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: > [] 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 > 88025efc3f38 8132b1e5 88017ede4540 0001 > 88025efc3f68 810a25f7 88025efcee60 88017edebdd8 > 88025eeb5400 0091 88025efc3f88 810c3cd4 > Call Trace: > > [] dump_stack+0x68/0x93 > [] lockdep_rcu_suspicious+0xd7/0x110 > [] rcu_eqs_enter_common.constprop.85+0x154/0x200 > [] rcu_irq_exit+0x44/0xa0 > [] irq_exit+0x61/0xd0 > [] do_IRQ+0x65/0x110 > [] common_interrupt+0x89/0x89 > > [] ? cpuidle_enter_state+0x151/0x200 > [] cpuidle_enter+0x12/0x20 > [] call_cpuidle+0x1e/0x40 > [] cpu_startup_entry+0x146/0x220 > [] start_secondary+0x148/0x170 > > Signed-off-by: Tobias Klausmann > Fixes: d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") > Cc: # v4.9 Acked-by: Felix Fietkau
[PATCH v2] ath9k: do not return early to fix rcu unlocking
Starting with commit d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") 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: [] 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 88025efc3f38 8132b1e5 88017ede4540 0001 88025efc3f68 810a25f7 88025efcee60 88017edebdd8 88025eeb5400 0091 88025efc3f88 810c3cd4 Call Trace: [] dump_stack+0x68/0x93 [] lockdep_rcu_suspicious+0xd7/0x110 [] rcu_eqs_enter_common.constprop.85+0x154/0x200 [] rcu_irq_exit+0x44/0xa0 [] irq_exit+0x61/0xd0 [] do_IRQ+0x65/0x110 [] common_interrupt+0x89/0x89 [] ? cpuidle_enter_state+0x151/0x200 [] cpuidle_enter+0x12/0x20 [] call_cpuidle+0x1e/0x40 [] cpu_startup_entry+0x146/0x220 [] start_secondary+0x148/0x170 Signed-off-by: Tobias KlausmannFixes: d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") Cc: # v4.9 --- v2: break instead of unlock (rename patch) [Felix Fietkau], fix reference to commit [Kalle Valo] --- drivers/net/wireless/ath/ath9k/xmit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 52bfbb988611..e47286bf378e 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c @@ -2787,7 +2787,7 @@ void ath_tx_edma_tasklet(struct ath_softc *sc) fifo_list = >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); -- 2.11.0
[PATCH v2] ath9k: do not return early to fix rcu unlocking
Starting with commit d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") 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: [] 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 88025efc3f38 8132b1e5 88017ede4540 0001 88025efc3f68 810a25f7 88025efcee60 88017edebdd8 88025eeb5400 0091 88025efc3f88 810c3cd4 Call Trace: [] dump_stack+0x68/0x93 [] lockdep_rcu_suspicious+0xd7/0x110 [] rcu_eqs_enter_common.constprop.85+0x154/0x200 [] rcu_irq_exit+0x44/0xa0 [] irq_exit+0x61/0xd0 [] do_IRQ+0x65/0x110 [] common_interrupt+0x89/0x89 [] ? cpuidle_enter_state+0x151/0x200 [] cpuidle_enter+0x12/0x20 [] call_cpuidle+0x1e/0x40 [] cpu_startup_entry+0x146/0x220 [] start_secondary+0x148/0x170 Signed-off-by: Tobias Klausmann Fixes: d94a461d7a7d ("ath9k: use ieee80211_tx_status_noskb where possible") Cc: # v4.9 --- v2: break instead of unlock (rename patch) [Felix Fietkau], fix reference to commit [Kalle Valo] --- drivers/net/wireless/ath/ath9k/xmit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 52bfbb988611..e47286bf378e 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c @@ -2787,7 +2787,7 @@ void ath_tx_edma_tasklet(struct ath_softc *sc) fifo_list = >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); -- 2.11.0