scheduler fixes
Subsystems (4)
Ingo Molnar
maintainerLinus,
Please pull the latest sched-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched-urgent-for-linus
HEAD: 95c0d71dcb853c2eca5f2231ebbd4c1d3af775b7 MAINTAINERS/sched: Update scheduler file pattern
Note that this commit:
164c33c6adee sched: Fix fork() error path to not crash
Is correct but not complete (some architectures like Tile are not covered yet) - the resulting additional fixes are still WIP and I did not want to delay these pending fixes. See this thread on lkml:
[PATCH] fork: fix error handling in dup_task()
Thanks,
Ingo
------------------>
Namhyung Kim (1):
MAINTAINERS/sched: Update scheduler file pattern
Peter Zijlstra (1):
sched/nohz: Rewrite and fix load-avg computation -- again
Salman Qazi (1):
sched: Fix fork() error path to not crash
MAINTAINERS | 2 +- include/linux/sched.h | 8 ++ kernel/fork.c | 11 +- kernel/sched/core.c | 275 ++++++++++++++++++++++++++++++++++------------ kernel/sched/idle_task.c | 1 - kernel/sched/sched.h | 2 - kernel/time/tick-sched.c | 2 + 7 files changed, 222 insertions(+), 79 deletions(-)
MAINTAINERS +1 -1
@@ -5909,7 +5909,7 @@ M: Ingo Molnar <[email protected]> M: Peter Zijlstra <[email protected]> T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core S: Maintained -F: kernel/sched* +F: kernel/sched/ F: include/linux/sched.h SCORE ARCHITECTURE
include/linux/sched.h +8 -0
@@ -1909,6 +1909,14 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p, }#endif +#ifdef CONFIG_NO_HZ +void calc_load_enter_idle (void ); +void calc_load_exit_idle (void ); +#else +static inline void calc_load_enter_idle (void ) { } +static inline void calc_load_exit_idle (void ) { } +#endif /* CONFIG_NO_HZ */ +#ifndef CONFIG_CPUMASK_OFFSTACK static inline int set_cpus_allowed (struct task_struct *p,cpumask_t new_mask) {
kernel/fork.c +8 -3
@@ -304,12 +304,17 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) } err =arch_dup_task_struct (tsk, orig); -if (err) - goto out; +/* +* We defer looking at err, because we will need this setup +* for the clean up path to work correctly. +*/ tsk->stack = ti; -setup_thread_stack (tsk, orig); + +if (err) + goto out; +clear_user_return_notifier (tsk);clear_tsk_need_resched (tsk); stackend =end_of_stack (tsk);
kernel/sched/core.c +203 -72
352 lines not on this page · raw message
kernel/sched/idle_task.c +0 -1
@@ -25,7 +25,6 @@ static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int flstatic struct task_struct *pick_next_task_idle (struct rq *rq) {schedstat_inc (rq, sched_goidle); -calc_load_account_idle (rq);return rq->idle; }
kernel/sched/sched.h +0 -2
@@ -942,8 +942,6 @@ static inline u64 sched_avg_period(void)return (u64 )sysctl_sched_time_avg *NSEC_PER_MSEC /2 ; } -void calc_load_account_idle (struct rq *this_rq); -#ifdef CONFIG_SCHED_HRTICK /*
kernel/time/tick-sched.c +2 -0
@@ -406,6 +406,7 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts)*/ if (!ts->tick_stopped) {select_nohz_load_balancer (1 ); +calc_load_enter_idle (); ts->idle_tick =hrtimer_get_expires (&ts->sched_timer); ts->tick_stopped =1 ;
@@ -597,6 +598,7 @@ void tick_nohz_idle_exit(void)account_idle_ticks (ticks);#endif +calc_load_exit_idle ();touch_softlockup_watchdog ();/* * Cancel the scheduled timer and restore the tick