lower migration thread/stop machine prio
PATCH 1/1 lower migration thread/stop machine prio
We should give some space at the top to allow things to schedule above everything in a default system. I think this takes better advantage of all the priorities we have.
This moves the stop_machine and migration threads to SCHED_FIFO prio 80.
Signed-off-by Daniel Walker <[email protected]>
--- include/linux/sched.h | 3 +++ include/linux/stop_machine.h | 3 +++ kernel/sched.c | 3 +-- kernel/stop_machine.c | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-)
include/linux/sched.h +3 -0
@@ -510,6 +510,9 @@ struct signal_struct {#define has_rt_policy (p) \ unlikely((p)->policy != SCHED_NORMAL && (p)->policy != SCHED_BATCH) +/* Must be high prio: stop_machine expects to yield to it. */ +#define MIGRATION_THREAD_PRIO (MAX_RT_PRIO-20) +/* * Some day this will be a full-fledged user tracking system.. */
include/linux/stop_machine.h +3 -0
@@ -8,6 +8,9 @@#include <asm/system.h> #if defined(CONFIG_STOP_MACHINE ) && defined(CONFIG_SMP ) + +#define STOP_MACHINE_PRIO (MAX_RT_PRIO-20) +/** * stop_machine_run: freeze the machine on all CPUs and run this function * @fn: the function to run
kernel/sched.c +1 -2
@@ -5289,9 +5289,8 @@ migration_call(struct notifier_block *nfreturn NOTIFY_BAD ; p->flags |=PF_NOFREEZE ;kthread_bind (p, cpu); -/* Must be high prio: stop_machine expects to yield to it. */ rq =task_rq_lock (p, &flags); -__setscheduler (p,SCHED_FIFO ,MAX_RT_PRIO -1 ); +__setscheduler (p,SCHED_FIFO ,MIGRATION_THREAD_PRIO );task_rq_unlock (rq, &flags);cpu_rq (cpu)->migration_thread = p;break ;
kernel/stop_machine.c +1 -1
@@ -86,7 +86,7 @@ static void stopmachine_set_state(enum sstatic int stop_machine (void ) {int i, ret =0 ; -struct sched_param param = { .sched_priority =MAX_RT_PRIO -1 }; +struct sched_param param = { .sched_priority =STOP_MACHINE_PRIO };/* One high-prio thread per cpu. We'll do this one. */ sched_setscheduler (current,SCHED_FIFO , ¶m);
--