forked from Minki/linux
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: Do less agressive buddy clearing sched: Disable SD_PREFER_LOCAL for MC/CPU domains
This commit is contained in:
commit
6e958d73c2
@ -143,6 +143,7 @@ extern unsigned long node_remap_size[];
|
||||
| 1*SD_BALANCE_FORK \
|
||||
| 0*SD_BALANCE_WAKE \
|
||||
| 1*SD_WAKE_AFFINE \
|
||||
| 1*SD_PREFER_LOCAL \
|
||||
| 0*SD_SHARE_CPUPOWER \
|
||||
| 0*SD_POWERSAVINGS_BALANCE \
|
||||
| 0*SD_SHARE_PKG_RESOURCES \
|
||||
|
@ -129,7 +129,7 @@ int arch_update_cpu_topology(void);
|
||||
| 1*SD_BALANCE_FORK \
|
||||
| 0*SD_BALANCE_WAKE \
|
||||
| 1*SD_WAKE_AFFINE \
|
||||
| 1*SD_PREFER_LOCAL \
|
||||
| 0*SD_PREFER_LOCAL \
|
||||
| 0*SD_SHARE_CPUPOWER \
|
||||
| 1*SD_SHARE_PKG_RESOURCES \
|
||||
| 0*SD_SERIALIZE \
|
||||
@ -162,7 +162,7 @@ int arch_update_cpu_topology(void);
|
||||
| 1*SD_BALANCE_FORK \
|
||||
| 0*SD_BALANCE_WAKE \
|
||||
| 1*SD_WAKE_AFFINE \
|
||||
| 1*SD_PREFER_LOCAL \
|
||||
| 0*SD_PREFER_LOCAL \
|
||||
| 0*SD_SHARE_CPUPOWER \
|
||||
| 0*SD_SHARE_PKG_RESOURCES \
|
||||
| 0*SD_SERIALIZE \
|
||||
|
@ -861,12 +861,21 @@ wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se);
|
||||
static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
|
||||
{
|
||||
struct sched_entity *se = __pick_next_entity(cfs_rq);
|
||||
struct sched_entity *buddy;
|
||||
|
||||
if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, se) < 1)
|
||||
return cfs_rq->next;
|
||||
if (cfs_rq->next) {
|
||||
buddy = cfs_rq->next;
|
||||
cfs_rq->next = NULL;
|
||||
if (wakeup_preempt_entity(buddy, se) < 1)
|
||||
return buddy;
|
||||
}
|
||||
|
||||
if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, se) < 1)
|
||||
return cfs_rq->last;
|
||||
if (cfs_rq->last) {
|
||||
buddy = cfs_rq->last;
|
||||
cfs_rq->last = NULL;
|
||||
if (wakeup_preempt_entity(buddy, se) < 1)
|
||||
return buddy;
|
||||
}
|
||||
|
||||
return se;
|
||||
}
|
||||
@ -1654,16 +1663,6 @@ static struct task_struct *pick_next_task_fair(struct rq *rq)
|
||||
|
||||
do {
|
||||
se = pick_next_entity(cfs_rq);
|
||||
/*
|
||||
* If se was a buddy, clear it so that it will have to earn
|
||||
* the favour again.
|
||||
*
|
||||
* If se was not a buddy, clear the buddies because neither
|
||||
* was elegible to run, let them earn it again.
|
||||
*
|
||||
* IOW. unconditionally clear buddies.
|
||||
*/
|
||||
__clear_buddies(cfs_rq, NULL);
|
||||
set_next_entity(cfs_rq, se);
|
||||
cfs_rq = group_cfs_rq(se);
|
||||
} while (cfs_rq);
|
||||
|
Loading…
Reference in New Issue
Block a user