Skip to content

Commit

Permalink
sched/rt: Document scheduler related skip-resched-check sites
Browse files Browse the repository at this point in the history
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 <tglx@linutronix.de>
Link: http://lkml.kernel.org/n/tip-gs88fvx2mdv5psnzxnv575ke@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
KAGA-KOKO authored and Ingo Molnar committed Mar 1, 2012
1 parent bd2f553 commit ba74c14
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 8 deletions.
2 changes: 1 addition & 1 deletion arch/powerpc/kernel/idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion arch/sparc/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 4 additions & 1 deletion include/linux/preempt.h
Original file line number Diff line number Diff line change
Expand Up @@ -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(); \
Expand Down Expand Up @@ -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)

Expand Down
6 changes: 3 additions & 3 deletions kernel/sched/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -3220,7 +3220,7 @@ static void __sched __schedule(void)

post_schedule(rq);

preempt_enable_no_resched();
sched_preempt_enable_no_resched();
if (need_resched())
goto need_resched;
}
Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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();

Expand Down
4 changes: 2 additions & 2 deletions kernel/softirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

/*
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit ba74c14

Please sign in to comment.