summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-03-21 13:32:17 +0100
committerClark Williams <williams@redhat.com>2012-02-15 10:32:32 -0600
commit31a092f0d40328fc2bfbb2d0b4e72a52d16cbf96 (patch)
tree230d1be16d38b7dd1f5bfd83bd2c51e939ee3000
parent57c8ea9f160d1d44fb761c3a2301a812856832f0 (diff)
preempt-mark-legitimated-no-resched-sites.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/powerpc/kernel/idle.c2
-rw-r--r--arch/sparc/kernel/process_64.c2
-rw-r--r--include/linux/preempt.h5
-rw-r--r--kernel/sched.c6
-rw-r--r--kernel/softirq.c4
5 files changed, 11 insertions, 8 deletions
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index f46dae5a56ef..5d70d1046e11 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -95,7 +95,7 @@ void cpu_idle(void)
ppc64_runlatch_on();
tick_nohz_restart_sched_tick();
if (cpu_should_die()) {
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
cpu_die();
}
schedule_preempt_disabled();
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 8ba0dbe63bdc..86fe09afc89a 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -104,7 +104,7 @@ void cpu_idle(void)
#ifdef CONFIG_HOTPLUG_CPU
if (cpu_is_offline(cpu)) {
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
cpu_play_dead();
}
#endif
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 58969b2a8a82..227b0f584719 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -48,12 +48,14 @@ do { \
barrier(); \
} while (0)
-#define preempt_enable_no_resched() \
+#define __preempt_enable_no_resched() \
do { \
barrier(); \
dec_preempt_count(); \
} while (0)
+#define preempt_enable_no_resched() __preempt_enable_no_resched()
+
#define preempt_enable() \
do { \
preempt_enable_no_resched(); \
@@ -92,6 +94,7 @@ do { \
#else /* !CONFIG_PREEMPT_COUNT */
#define preempt_disable() do { } while (0)
+#define __preempt_enable_no_resched() do { } while (0)
#define preempt_enable_no_resched() do { } while (0)
#define preempt_enable() do { } while (0)
diff --git a/kernel/sched.c b/kernel/sched.c
index 465fd119d3b2..e35f01c5146b 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4415,7 +4415,7 @@ need_resched:
post_schedule(rq);
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
if (need_resched())
goto need_resched;
}
@@ -4463,7 +4463,7 @@ EXPORT_SYMBOL(schedule);
*/
void __sched schedule_preempt_disabled(void)
{
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
schedule();
preempt_disable();
}
@@ -5705,7 +5705,7 @@ SYSCALL_DEFINE0(sched_yield)
__release(rq->lock);
spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
do_raw_spin_unlock(&rq->lock);
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
schedule();
diff --git a/kernel/softirq.c b/kernel/softirq.c
index c9da2c84f99e..a8becbf41900 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -353,7 +353,7 @@ void irq_exit(void)
if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
tick_nohz_stop_sched_tick(0);
#endif
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
}
/*
@@ -759,7 +759,7 @@ static int run_ksoftirqd(void * __bind_cpu)
if (local_softirq_pending())
__do_softirq();
local_irq_enable();
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
cond_resched();
preempt_disable();
rcu_note_context_switch((long)__bind_cpu);