sched/rt: Document scheduler related skip-resched-check sites
Subsystems (3)
Commit-ID: ba74c1448f127649046615ec017bded7b2a76f29 Gitweb: http://git.kernel.org/tip/ba74c1448f127649046615ec017bded7b2a76f29 Author: Thomas Gleixner <[email protected]> AuthorDate: Mon, 21 Mar 2011 13:32:17 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Thu, 1 Mar 2012 10:28:04 +0100
sched/rt: Document scheduler related skip-resched-check sites
Create a distinction between scheduler related preempt_enable_no_resched() calls and the nearly one hundred other places in the kernel that do not want to reschedule, for one reason or another.
This distinction matters for -rt, where the scheduler and the non-scheduler preempt models (and checks) are different. For upstream it's purely documentational.
Signed-off-by Thomas Gleixner <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- arch/powerpc/kernel/idle.c | 2 +- arch/sparc/kernel/process_64.c | 2 +- include/linux/preempt.h | 5 ++++- kernel/sched/core.c | 6 +++--- kernel/softirq.c | 4 ++-- 5 files changed, 11 insertions(+), 8 deletions(-)
arch/powerpc/kernel/idle.c +1 -1
@@ -102,7 +102,7 @@ void cpu_idle(void)rcu_idle_exit ();tick_nohz_idle_exit ();if (cpu_should_die ()) { -preempt_enable_no_resched (); +sched_preempt_enable_no_resched ();cpu_die (); }schedule_preempt_disabled ();
arch/sparc/kernel/process_64.c +1 -1
@@ -106,7 +106,7 @@ void cpu_idle(void)#ifdef CONFIG_HOTPLUG_CPU if (cpu_is_offline (cpu)) { -preempt_enable_no_resched (); +sched_preempt_enable_no_resched ();cpu_play_dead (); }#endif
include/linux/preempt.h +4 -1
@@ -48,12 +48,14 @@ do { \barrier (); \ } while (0) -#define preempt_enable_no_resched () \ +#define sched_preempt_enable_no_resched () \ do { \ barrier(); \ dec_preempt_count(); \ } while (0) +#define preempt_enable_no_resched () sched_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 sched_preempt_enable_no_resched () do { } while (0)#define preempt_enable_no_resched () do { } while (0)#define preempt_enable () do { } while (0)
kernel/sched/core.c +3 -3
@@ -3220,7 +3220,7 @@ need_resched:post_schedule (rq); -preempt_enable_no_resched (); +sched_preempt_enable_no_resched ();if (need_resched ()) goto need_resched; }
@@ -3253,7 +3253,7 @@ EXPORT_SYMBOL(schedule);*/ void __sched schedule_preempt_disabled(void) { -preempt_enable_no_resched (); +sched_preempt_enable_no_resched ();schedule ();preempt_disable (); }
@@ -4486,7 +4486,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 (); +sched_preempt_enable_no_resched ();schedule ();
kernel/softirq.c +2 -2
@@ -353,7 +353,7 @@ void irq_exit(void)tick_nohz_irq_exit ();#endif rcu_irq_exit (); -preempt_enable_no_resched (); +sched_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 (); +sched_preempt_enable_no_resched ();cond_resched ();preempt_disable ();rcu_note_context_switch ((long )__bind_cpu);