scheduler fixes
Subsystems (3)
Linus,
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: 160594e99dbbb0a5600ad922c630952c7c1c14bf cpusets: Remove an unused variable
Thanks,
Ingo
------------------>
Dan Carpenter (1):
cpusets: Remove an unused variable
Ingo Molnar (1):
MAINTAINERS: Update email address for SCHEDULER and PERF EVENTS
Michael J Wang (1):
sched/rt: Improve pick_next_highest_task_rt()
Peter Zijlstra (3):
sched: Fix compiler warning about declared inline after use sched/x86/smp: Do not enable IRQs over calibrate_delay()
sched: Fix select_fallback_rq() vs cpu_active/cpu_online
MAINTAINERS | 4 +- arch/x86/kernel/smpboot.c | 5 --- include/linux/cpuset.h | 6 +--- kernel/cpuset.c | 21 +++------------ kernel/sched/core.c | 62 +++++++++++++++++++++++++++++++++----------- kernel/sched/fair.c | 16 ++++++------ kernel/sched/rt.c | 2 +- 7 files changed, 63 insertions(+), 53 deletions(-)
MAINTAINERS +2 -2
@@ -5112,7 +5112,7 @@ F: kernel/delayacct.c PERFORMANCE EVENTS SUBSYSTEM M: Peter Zijlstra <[email protected]> M: Paul Mackerras <[email protected]> -M: Ingo Molnar <[email protected]> +M: Ingo Molnar <[email protected]> M: Arnaldo Carvalho de Melo <[email protected]> T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core S: Supported
@@ -5736,7 +5736,7 @@ S: Maintained F: drivers/watchdog/sc1200wdt.c SCHEDULER -M: Ingo Molnar <[email protected]> +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
arch/x86/kernel/smpboot.c +0 -5
@@ -219,14 +219,9 @@ static void __cpuinit smp_callin(void)* Update loops_per_jiffy in cpu_data. Previous call to * smp_store_cpu_info() stored a value that is close but not as * accurate as the value just calculated. -* -* Need to enable IRQs because it can take longer and then -* the NMI watchdog might kill us. */ -local_irq_enable ();calibrate_delay ();cpu_data (cpuid).loops_per_jiffy = loops_per_jiffy; -local_irq_disable ();pr_debug ("Stack at about %p\n" , &cpuid);/*
include/linux/cpuset.h +2 -4
@@ -22,7 +22,7 @@ extern int cpuset_init(void);extern void cpuset_init_smp (void );extern void cpuset_update_active_cpus (void );extern void cpuset_cpus_allowed (struct task_struct *p,struct cpumask *mask); -extern int cpuset_cpus_allowed_fallback (struct task_struct *p); +extern void cpuset_cpus_allowed_fallback (struct task_struct *p);extern nodemask_t cpuset_mems_allowed (struct task_struct *p);#define cpuset_current_mems_allowed (current->mems_allowed)void cpuset_init_current_mems_allowed (void );
@@ -144,10 +144,8 @@ static inline void cpuset_cpus_allowed(struct task_struct *p,cpumask_copy (mask, cpu_possible_mask); } -static inline int cpuset_cpus_allowed_fallback (struct task_struct *p) +static inline void cpuset_cpus_allowed_fallback (struct task_struct *p) { -do_set_cpus_allowed (p, cpu_possible_mask); -return cpumask_any (cpu_active_mask); }static inline nodemask_t cpuset_mems_allowed (struct task_struct *p)
kernel/cpuset.c +4 -17
@@ -2195,10 +2195,9 @@ void cpuset_cpus_allowed(struct task_struct *tsk, struct cpumask *pmask)mutex_unlock (&callback_mutex); } -int cpuset_cpus_allowed_fallback (struct task_struct *tsk) +void cpuset_cpus_allowed_fallback (struct task_struct *tsk) {const struct cpuset *cs; -int cpu;rcu_read_lock (); cs =task_cs (tsk);
@@ -2219,22 +2218,10 @@ int cpuset_cpus_allowed_fallback(struct task_struct *tsk)* changes in tsk_cs()->cpus_allowed. Otherwise we can temporary * set any mask even if it is not right from task_cs() pov, * the pending set_cpus_allowed_ptr() will fix things. +* +* select_fallback_rq() will fix things ups and set cpu_possible_mask +* if required. */ - - cpu =cpumask_any_and (&tsk->cpus_allowed, cpu_active_mask); -if (cpu >= nr_cpu_ids) { -/* -* Either tsk->cpus_allowed is wrong (see above) or it -* is actually empty. The latter case is only possible -* if we are racing with remove_tasks_in_empty_cpuset(). -* Like above we can temporary set any mask and rely on -* set_cpus_allowed_ptr() as synchronization point. -*/ -do_set_cpus_allowed (tsk, cpu_possible_mask); - cpu =cpumask_any (cpu_active_mask); - } - -return cpu; }void cpuset_init_current_mems_allowed (void )
kernel/sched/core.c +46 -16
75 lines not on this page · raw message
kernel/sched/fair.c +8 -8
@@ -416,8 +416,8 @@ find_matching_se(struct sched_entity **se, struct sched_entity **pse)#endif /* CONFIG_FAIR_GROUP_SCHED */ -static void account_cfs_rq_runtime (struct cfs_rq *cfs_rq, -unsigned long delta_exec); +static __always_inline +void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, unsigned long delta_exec);/************************************************************** * Scheduling class tree data structure manipulation methods:
@@ -1162,7 +1162,7 @@ static void clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se)__clear_buddies_skip (se); } -static void return_cfs_rq_runtime (struct cfs_rq *cfs_rq); +static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq);static void dequeue_entity (struct cfs_rq *cfs_rq,struct sched_entity *se,int flags)
@@ -1546,8 +1546,8 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq,resched_task (rq_of (cfs_rq)->curr); } -static __always_inline void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, -unsigned long delta_exec) +static __always_inline +void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, unsigned long delta_exec) {if (!cfs_bandwidth_used () || !cfs_rq->runtime_enabled)return ;
@@ -2073,11 +2073,11 @@ void unthrottle_offline_cfs_rqs(struct rq *rq) }#else /* CONFIG_CFS_BANDWIDTH */ -static void account_cfs_rq_runtime (struct cfs_rq *cfs_rq, -unsigned long delta_exec) {} +static __always_inline +void account_cfs_rq_runtime(struct cfs_rq *cfs_rq, unsigned long delta_exec) {}static void check_cfs_rq_runtime (struct cfs_rq *cfs_rq) {}static void check_enqueue_throttle (struct cfs_rq *cfs_rq) {} -static void return_cfs_rq_runtime (struct cfs_rq *cfs_rq) {} +static __always_inline void return_cfs_rq_runtime(struct cfs_rq *cfs_rq) {}static inline int cfs_rq_throttled (struct cfs_rq *cfs_rq) {
kernel/sched/rt.c +1 -1
@@ -1428,7 +1428,7 @@ static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu) next_idx:if (idx >=MAX_RT_PRIO )continue ; -if (next && next->prio < idx) +if (next && next->prio <= idx)continue ;list_for_each_entry (rt_se, array->queue + idx, run_list) {struct task_struct *p;