mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 16:46:23 +08:00
Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: sched: sched_slice() fixlet sched: fix update_min_vruntime sched: SCHED_OTHER vs SCHED_IDLE isolation sched: SCHED_IDLE weight change sched: fix bandwidth validation for UID grouping Revert "sched: improve preempt debugging"
This commit is contained in:
commit
7cb36b6ccd
@ -1323,8 +1323,8 @@ static inline void update_load_sub(struct load_weight *lw, unsigned long dec)
|
||||
* slice expiry etc.
|
||||
*/
|
||||
|
||||
#define WEIGHT_IDLEPRIO 2
|
||||
#define WMULT_IDLEPRIO (1 << 31)
|
||||
#define WEIGHT_IDLEPRIO 3
|
||||
#define WMULT_IDLEPRIO 1431655765
|
||||
|
||||
/*
|
||||
* Nice levels are multiplicative, with a gentle 10% change for every
|
||||
@ -4440,7 +4440,7 @@ void __kprobes sub_preempt_count(int val)
|
||||
/*
|
||||
* Underflow?
|
||||
*/
|
||||
if (DEBUG_LOCKS_WARN_ON(val > preempt_count() - (!!kernel_locked())))
|
||||
if (DEBUG_LOCKS_WARN_ON(val > preempt_count()))
|
||||
return;
|
||||
/*
|
||||
* Is the spinlock portion underflowing?
|
||||
@ -9050,6 +9050,13 @@ static int tg_schedulable(struct task_group *tg, void *data)
|
||||
runtime = d->rt_runtime;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USER_SCHED
|
||||
if (tg == &root_task_group) {
|
||||
period = global_rt_period();
|
||||
runtime = global_rt_runtime();
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Cannot have more runtime than the period.
|
||||
*/
|
||||
|
@ -283,7 +283,7 @@ static void update_min_vruntime(struct cfs_rq *cfs_rq)
|
||||
struct sched_entity,
|
||||
run_node);
|
||||
|
||||
if (vruntime == cfs_rq->min_vruntime)
|
||||
if (!cfs_rq->curr)
|
||||
vruntime = se->vruntime;
|
||||
else
|
||||
vruntime = min_vruntime(vruntime, se->vruntime);
|
||||
@ -429,7 +429,10 @@ static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
u64 slice = __sched_period(cfs_rq->nr_running + !se->on_rq);
|
||||
|
||||
for_each_sched_entity(se) {
|
||||
struct load_weight *load = &cfs_rq->load;
|
||||
struct load_weight *load;
|
||||
|
||||
cfs_rq = cfs_rq_of(se);
|
||||
load = &cfs_rq->load;
|
||||
|
||||
if (unlikely(!se->on_rq)) {
|
||||
struct load_weight lw = cfs_rq->load;
|
||||
@ -677,9 +680,13 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
|
||||
unsigned long thresh = sysctl_sched_latency;
|
||||
|
||||
/*
|
||||
* convert the sleeper threshold into virtual time
|
||||
* Convert the sleeper threshold into virtual time.
|
||||
* SCHED_IDLE is a special sub-class. We care about
|
||||
* fairness only relative to other SCHED_IDLE tasks,
|
||||
* all of which have the same weight.
|
||||
*/
|
||||
if (sched_feat(NORMALIZED_SLEEPER))
|
||||
if (sched_feat(NORMALIZED_SLEEPER) &&
|
||||
task_of(se)->policy != SCHED_IDLE)
|
||||
thresh = calc_delta_fair(thresh, se);
|
||||
|
||||
vruntime -= thresh;
|
||||
@ -1340,14 +1347,18 @@ wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se)
|
||||
|
||||
static void set_last_buddy(struct sched_entity *se)
|
||||
{
|
||||
for_each_sched_entity(se)
|
||||
cfs_rq_of(se)->last = se;
|
||||
if (likely(task_of(se)->policy != SCHED_IDLE)) {
|
||||
for_each_sched_entity(se)
|
||||
cfs_rq_of(se)->last = se;
|
||||
}
|
||||
}
|
||||
|
||||
static void set_next_buddy(struct sched_entity *se)
|
||||
{
|
||||
for_each_sched_entity(se)
|
||||
cfs_rq_of(se)->next = se;
|
||||
if (likely(task_of(se)->policy != SCHED_IDLE)) {
|
||||
for_each_sched_entity(se)
|
||||
cfs_rq_of(se)->next = se;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1393,12 +1404,18 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int sync)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Batch tasks do not preempt (their preemption is driven by
|
||||
* Batch and idle tasks do not preempt (their preemption is driven by
|
||||
* the tick):
|
||||
*/
|
||||
if (unlikely(p->policy == SCHED_BATCH))
|
||||
if (unlikely(p->policy != SCHED_NORMAL))
|
||||
return;
|
||||
|
||||
/* Idle tasks are by definition preempted by everybody. */
|
||||
if (unlikely(curr->policy == SCHED_IDLE)) {
|
||||
resched_task(curr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sched_feat(WAKEUP_PREEMPT))
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user