diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-10-04 13:30:25 (GMT) |
---|---|---|
committer | Emil Medve <Emilian.Medve@Freescale.com> | 2013-05-26 07:14:08 (GMT) |
commit | d3f610ed41f4b194e2500c98d55455d0edc83bf3 (patch) | |
tree | 7e5c21f8ff1644fb3e2bf389357d40227399c440 /kernel | |
parent | 25669d470866a3382775d1ad7f8efbd020a81eb6 (diff) | |
download | linux-fsl-qoriq-d3f610ed41f4b194e2500c98d55455d0edc83bf3.tar.xz |
softirq: Make serving softirqs a task flag
Avoid the percpu softirq_runner pointer magic by using a task flag.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/softirq.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index f52cdbc..0a810e4 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -375,7 +375,6 @@ static void ksoftirqd_clr_sched_params(unsigned int cpu, bool online) { } * On RT we serialize softirq execution with a cpu local lock */ static DEFINE_LOCAL_IRQ_LOCK(local_softirq_lock); -static DEFINE_PER_CPU(struct task_struct *, local_softirq_runner); static void __do_softirq_common(int need_rcu_bh_qs); @@ -430,22 +429,9 @@ void _local_bh_enable(void) } EXPORT_SYMBOL(_local_bh_enable); -/* For tracing */ -int notrace __in_softirq(void) -{ - if (__get_cpu_var(local_softirq_lock).owner == current) - return __get_cpu_var(local_softirq_lock).nestcnt; - return 0; -} - int in_serving_softirq(void) { - int res; - - preempt_disable(); - res = __get_cpu_var(local_softirq_runner) == current; - preempt_enable(); - return res; + return current->flags & PF_IN_SOFTIRQ; } EXPORT_SYMBOL(in_serving_softirq); @@ -463,7 +449,7 @@ static void __do_softirq_common(int need_rcu_bh_qs) /* Reset the pending bitmask before enabling irqs */ set_softirq_pending(0); - __get_cpu_var(local_softirq_runner) = current; + current->flags |= PF_IN_SOFTIRQ; lockdep_softirq_enter(); @@ -474,7 +460,7 @@ static void __do_softirq_common(int need_rcu_bh_qs) wakeup_softirqd(); lockdep_softirq_exit(); - __get_cpu_var(local_softirq_runner) = NULL; + current->flags &= ~PF_IN_SOFTIRQ; current->softirq_nestcnt--; } |