[PATCH v2 2/8] sched: omit stop_sched_class when !SMP
The stop class is invoked through stop_machine only. This is dead code on UP builds. Signed-off-by: Nicolas Pitre--- kernel/sched/Makefile | 4 ++-- kernel/sched/core.c | 60 +-- kernel/sched/sched.h | 4 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile index 89ab675866..5e4c2e7a63 100644 --- a/kernel/sched/Makefile +++ b/kernel/sched/Makefile @@ -16,9 +16,9 @@ CFLAGS_core.o := $(PROFILING) -fno-omit-frame-pointer endif obj-y += core.o loadavg.o clock.o cputime.o -obj-y += idle_task.o fair.o rt.o deadline.o stop_task.o +obj-y += idle_task.o fair.o rt.o deadline.o obj-y += wait.o swait.o completion.o idle.o -obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o topology.o +obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o topology.o stop_task.o obj-$(CONFIG_SCHED_AUTOGROUP) += autogroup.o obj-$(CONFIG_SCHEDSTATS) += stats.o obj-$(CONFIG_SCHED_DEBUG) += debug.o diff --git a/kernel/sched/core.c b/kernel/sched/core.c index de274b1bd2..94fa712791 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -788,36 +788,6 @@ void deactivate_task(struct rq *rq, struct task_struct *p, int flags) dequeue_task(rq, p, flags); } -void sched_set_stop_task(int cpu, struct task_struct *stop) -{ - struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; - struct task_struct *old_stop = cpu_rq(cpu)->stop; - - if (stop) { - /* -* Make it appear like a SCHED_FIFO task, its something -* userspace knows about and won't get confused about. -* -* Also, it will make PI more or less work without too -* much confusion -- but then, stop work should not -* rely on PI working anyway. -*/ - sched_setscheduler_nocheck(stop, SCHED_FIFO, ); - - stop->sched_class = _sched_class; - } - - cpu_rq(cpu)->stop = stop; - - if (old_stop) { - /* -* Reset it back to a normal scheduling class so that -* it can die in pieces. -*/ - old_stop->sched_class = _sched_class; - } -} - /* * __normal_prio - return the priority that is based on the static prio */ @@ -1588,6 +1558,36 @@ static void update_avg(u64 *avg, u64 sample) *avg += diff >> 3; } +void sched_set_stop_task(int cpu, struct task_struct *stop) +{ + struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; + struct task_struct *old_stop = cpu_rq(cpu)->stop; + + if (stop) { + /* +* Make it appear like a SCHED_FIFO task, its something +* userspace knows about and won't get confused about. +* +* Also, it will make PI more or less work without too +* much confusion -- but then, stop work should not +* rely on PI working anyway. +*/ + sched_setscheduler_nocheck(stop, SCHED_FIFO, ); + + stop->sched_class = _sched_class; + } + + cpu_rq(cpu)->stop = stop; + + if (old_stop) { + /* +* Reset it back to a normal scheduling class so that +* it can die in pieces. +*/ + old_stop->sched_class = _sched_class; + } +} + #else static inline int __set_cpus_allowed_ptr(struct task_struct *p, diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 6dda2aab73..053f60afb7 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1422,7 +1422,11 @@ static inline void set_curr_task(struct rq *rq, struct task_struct *curr) curr->sched_class->set_curr_task(rq); } +#ifdef CONFIG_SMP #define sched_class_highest (_sched_class) +#else +#define sched_class_highest (_sched_class) +#endif #define for_each_class(class) \ for (class = sched_class_highest; class; class = class->next) -- 2.9.4
[PATCH v2 2/8] sched: omit stop_sched_class when !SMP
The stop class is invoked through stop_machine only. This is dead code on UP builds. Signed-off-by: Nicolas Pitre --- kernel/sched/Makefile | 4 ++-- kernel/sched/core.c | 60 +-- kernel/sched/sched.h | 4 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile index 89ab675866..5e4c2e7a63 100644 --- a/kernel/sched/Makefile +++ b/kernel/sched/Makefile @@ -16,9 +16,9 @@ CFLAGS_core.o := $(PROFILING) -fno-omit-frame-pointer endif obj-y += core.o loadavg.o clock.o cputime.o -obj-y += idle_task.o fair.o rt.o deadline.o stop_task.o +obj-y += idle_task.o fair.o rt.o deadline.o obj-y += wait.o swait.o completion.o idle.o -obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o topology.o +obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o topology.o stop_task.o obj-$(CONFIG_SCHED_AUTOGROUP) += autogroup.o obj-$(CONFIG_SCHEDSTATS) += stats.o obj-$(CONFIG_SCHED_DEBUG) += debug.o diff --git a/kernel/sched/core.c b/kernel/sched/core.c index de274b1bd2..94fa712791 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -788,36 +788,6 @@ void deactivate_task(struct rq *rq, struct task_struct *p, int flags) dequeue_task(rq, p, flags); } -void sched_set_stop_task(int cpu, struct task_struct *stop) -{ - struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; - struct task_struct *old_stop = cpu_rq(cpu)->stop; - - if (stop) { - /* -* Make it appear like a SCHED_FIFO task, its something -* userspace knows about and won't get confused about. -* -* Also, it will make PI more or less work without too -* much confusion -- but then, stop work should not -* rely on PI working anyway. -*/ - sched_setscheduler_nocheck(stop, SCHED_FIFO, ); - - stop->sched_class = _sched_class; - } - - cpu_rq(cpu)->stop = stop; - - if (old_stop) { - /* -* Reset it back to a normal scheduling class so that -* it can die in pieces. -*/ - old_stop->sched_class = _sched_class; - } -} - /* * __normal_prio - return the priority that is based on the static prio */ @@ -1588,6 +1558,36 @@ static void update_avg(u64 *avg, u64 sample) *avg += diff >> 3; } +void sched_set_stop_task(int cpu, struct task_struct *stop) +{ + struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 }; + struct task_struct *old_stop = cpu_rq(cpu)->stop; + + if (stop) { + /* +* Make it appear like a SCHED_FIFO task, its something +* userspace knows about and won't get confused about. +* +* Also, it will make PI more or less work without too +* much confusion -- but then, stop work should not +* rely on PI working anyway. +*/ + sched_setscheduler_nocheck(stop, SCHED_FIFO, ); + + stop->sched_class = _sched_class; + } + + cpu_rq(cpu)->stop = stop; + + if (old_stop) { + /* +* Reset it back to a normal scheduling class so that +* it can die in pieces. +*/ + old_stop->sched_class = _sched_class; + } +} + #else static inline int __set_cpus_allowed_ptr(struct task_struct *p, diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 6dda2aab73..053f60afb7 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1422,7 +1422,11 @@ static inline void set_curr_task(struct rq *rq, struct task_struct *curr) curr->sched_class->set_curr_task(rq); } +#ifdef CONFIG_SMP #define sched_class_highest (_sched_class) +#else +#define sched_class_highest (_sched_class) +#endif #define for_each_class(class) \ for (class = sched_class_highest; class; class = class->next) -- 2.9.4