summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/jme.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2021-03-09 09:42:10 +0100
committerThomas Gleixner <tglx@linutronix.de>2021-03-17 16:33:57 +0100
commiteb2dafbba8b824ee77f166629babd470dd0b1c0a (patch)
treec3a84b3625d79c8b129e05c252be3f7d3ab376f8 /drivers/net/ethernet/jme.h
parent697d8c63c4a2991a22a896a5e6adcdbb28fefe56 (diff)
downloadlinux-stable-eb2dafbba8b824ee77f166629babd470dd0b1c0a.tar.gz
linux-stable-eb2dafbba8b824ee77f166629babd470dd0b1c0a.tar.bz2
linux-stable-eb2dafbba8b824ee77f166629babd470dd0b1c0a.zip
tasklets: Prevent tasklet_unlock_spin_wait() deadlock on RT
tasklet_unlock_spin_wait() spin waits for the TASKLET_STATE_SCHED bit in the tasklet state to be cleared. This works on !RT nicely because the corresponding execution can only happen on a different CPU. On RT softirq processing is preemptible, therefore a task preempting the softirq processing thread can spin forever. Prevent this by invoking local_bh_disable()/enable() inside the loop. In case that the softirq processing thread was preempted by the current task, current will block on the local lock which yields the CPU to the preempted softirq processing thread. If the tasklet is processed on a different CPU then the local_bh_disable()/enable() pair is just a waste of processor cycles. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20210309084241.988908275@linutronix.de
Diffstat (limited to 'drivers/net/ethernet/jme.h')
0 files changed, 0 insertions, 0 deletions