softirq: Add RT specific softirq accounting
authorThomas Gleixner <tglx@linutronix.de>
Tue, 9 Mar 2021 08:55:53 +0000 (09:55 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 17 Mar 2021 15:34:08 +0000 (16:34 +0100)
commit728b478d2d358480b333b42d0e10e0fecb20114c
tree2f1a1bd80bd1c0a018bb881bab907c476b2c1e28
parent6fd4e861250b5c89ad460a9f265caeb1bbbfc323
softirq: Add RT specific softirq accounting

RT requires the softirq processing and local bottomhalf disabled regions to
be preemptible. Using the normal preempt count based serialization is
therefore not possible because this implicitely disables preemption.

RT kernels use a per CPU local lock to serialize bottomhalfs. As
local_bh_disable() can nest the lock can only be acquired on the outermost
invocation of local_bh_disable() and released when the nest count becomes
zero. Tasks which hold the local lock can be preempted so its required to
keep track of the nest count per task.

Add a RT only counter to task struct and adjust the relevant macros in
preempt.h.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Tested-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210309085726.983627589@linutronix.de
include/linux/hardirq.h
include/linux/preempt.h
include/linux/sched.h