diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-10-04 13:20:47 (GMT) |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-04-10 00:20:07 (GMT) |
commit | 055aaeb0f5e8558b0b74ae6ecf383a3f6c40c007 (patch) | |
tree | 4fbf7a7dca018ed97b71179f2d71ff5aafd40a42 /kernel/power | |
parent | 0f6a61d357fc7af4867359bbde48f9c3cac0f193 (diff) | |
download | linux-fsl-qoriq-055aaeb0f5e8558b0b74ae6ecf383a3f6c40c007.tar.xz |
softirq: Split softirq locks
The 3.x RT series removed the split softirq implementation in favour
of pushing softirq processing into the context of the thread which
raised it. Though this prevents us from handling the various softirqs
at different priorities. Now instead of reintroducing the split
softirq threads we split the locks which serialize the softirq
processing.
If a softirq is raised in context of a thread, then the softirq is
noted on a per thread field, if the thread is in a bh disabled
region. If the softirq is raised from hard interrupt context, then the
bit is set in the flag field of ksoftirqd and ksoftirqd is invoked.
When a thread leaves a bh disabled region, then it tries to execute
the softirqs which have been raised in its own context. It acquires
the per softirq / per cpu lock for the softirq and then checks,
whether the softirq is still pending in the per cpu
local_softirq_pending() field. If yes, it runs the softirq. If no,
then some other task executed it already. This allows for zero config
softirq elevation in the context of user space tasks or interrupt
threads.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/power')
0 files changed, 0 insertions, 0 deletions