122 lines
3.4 KiB
Diff
122 lines
3.4 KiB
Diff
From ef5a3ffd7a493e0bd304b8692c91da3444b05290 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Mon, 21 Mar 2011 13:32:17 +0100
|
|
Subject: [PATCH 045/303] preempt-mark-legitimated-no-resched-sites.patch
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
---
|
|
arch/powerpc/kernel/idle.c | 2 +-
|
|
arch/sparc/kernel/process_64.c | 2 +-
|
|
include/linux/preempt.h | 5 ++++-
|
|
kernel/sched.c | 6 +++---
|
|
kernel/softirq.c | 4 ++--
|
|
5 files changed, 11 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
|
|
index f46dae5..5d70d10 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 8ba0dbe..86fe09a 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 58969b2..227b0f5 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 83f1c88..dbc3927 100644
|
|
--- a/kernel/sched.c
|
|
+++ b/kernel/sched.c
|
|
@@ -4608,7 +4608,7 @@ need_resched:
|
|
|
|
post_schedule(rq);
|
|
|
|
- preempt_enable_no_resched();
|
|
+ __preempt_enable_no_resched();
|
|
if (need_resched())
|
|
goto need_resched;
|
|
}
|
|
@@ -4656,7 +4656,7 @@ EXPORT_SYMBOL(schedule);
|
|
*/
|
|
void __sched schedule_preempt_disabled(void)
|
|
{
|
|
- preempt_enable_no_resched();
|
|
+ __preempt_enable_no_resched();
|
|
schedule();
|
|
preempt_disable();
|
|
}
|
|
@@ -5898,7 +5898,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 c9da2c8..a8becbf 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);
|