Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba74c144 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Ingo Molnar
Browse files

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: default avatarThomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/n/tip-gs88fvx2mdv5psnzxnv575ke@git.kernel.org


Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent bd2f5536
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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
+4 −1
Original line number Diff line number Diff line
@@ -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)

+3 −3
Original line number Diff line number Diff line
@@ -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;
}
@@ -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();

+2 −2
Original line number Diff line number Diff line
@@ -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);