From: Daniel Walker 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 Cc: Ingo Molnar Cc: Nick Piggin Cc: Rusty Russell Signed-off-by: Andrew Morton --- 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(-) diff -puN include/linux/sched.h~lower-migration-thread-stop-machine-prio include/linux/sched.h --- a/include/linux/sched.h~lower-migration-thread-stop-machine-prio +++ a/include/linux/sched.h @@ -507,6 +507,9 @@ struct signal_struct { #define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH) #define has_rt_policy(p) unlikely(is_rt_policy((p)->policy)) +/* 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.. */ diff -puN include/linux/stop_machine.h~lower-migration-thread-stop-machine-prio include/linux/stop_machine.h --- a/include/linux/stop_machine.h~lower-migration-thread-stop-machine-prio +++ a/include/linux/stop_machine.h @@ -8,6 +8,9 @@ #include #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 diff -puN kernel/sched.c~lower-migration-thread-stop-machine-prio kernel/sched.c --- a/kernel/sched.c~lower-migration-thread-stop-machine-prio +++ a/kernel/sched.c @@ -5172,9 +5172,8 @@ migration_call(struct notifier_block *nf return 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; diff -puN kernel/stop_machine.c~lower-migration-thread-stop-machine-prio kernel/stop_machine.c --- a/kernel/stop_machine.c~lower-migration-thread-stop-machine-prio +++ a/kernel/stop_machine.c @@ -86,7 +86,7 @@ static void stopmachine_set_state(enum s static 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); _