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:
@@ -143,6 +143,7 @@ extern unsigned long node_remap_size[];
|
|||||||
| 1*SD_BALANCE_FORK \
|
| 1*SD_BALANCE_FORK \
|
||||||
| 0*SD_BALANCE_WAKE \
|
| 0*SD_BALANCE_WAKE \
|
||||||
| 1*SD_WAKE_AFFINE \
|
| 1*SD_WAKE_AFFINE \
|
||||||
|
| 1*SD_PREFER_LOCAL \
|
||||||
| 0*SD_SHARE_CPUPOWER \
|
| 0*SD_SHARE_CPUPOWER \
|
||||||
| 0*SD_POWERSAVINGS_BALANCE \
|
| 0*SD_POWERSAVINGS_BALANCE \
|
||||||
| 0*SD_SHARE_PKG_RESOURCES \
|
| 0*SD_SHARE_PKG_RESOURCES \
|
||||||
|
@@ -129,7 +129,7 @@ int arch_update_cpu_topology(void);
|
|||||||
| 1*SD_BALANCE_FORK \
|
| 1*SD_BALANCE_FORK \
|
||||||
| 0*SD_BALANCE_WAKE \
|
| 0*SD_BALANCE_WAKE \
|
||||||
| 1*SD_WAKE_AFFINE \
|
| 1*SD_WAKE_AFFINE \
|
||||||
| 1*SD_PREFER_LOCAL \
|
| 0*SD_PREFER_LOCAL \
|
||||||
| 0*SD_SHARE_CPUPOWER \
|
| 0*SD_SHARE_CPUPOWER \
|
||||||
| 1*SD_SHARE_PKG_RESOURCES \
|
| 1*SD_SHARE_PKG_RESOURCES \
|
||||||
| 0*SD_SERIALIZE \
|
| 0*SD_SERIALIZE \
|
||||||
@@ -162,7 +162,7 @@ int arch_update_cpu_topology(void);
|
|||||||
| 1*SD_BALANCE_FORK \
|
| 1*SD_BALANCE_FORK \
|
||||||
| 0*SD_BALANCE_WAKE \
|
| 0*SD_BALANCE_WAKE \
|
||||||
| 1*SD_WAKE_AFFINE \
|
| 1*SD_WAKE_AFFINE \
|
||||||
| 1*SD_PREFER_LOCAL \
|
| 0*SD_PREFER_LOCAL \
|
||||||
| 0*SD_SHARE_CPUPOWER \
|
| 0*SD_SHARE_CPUPOWER \
|
||||||
| 0*SD_SHARE_PKG_RESOURCES \
|
| 0*SD_SHARE_PKG_RESOURCES \
|
||||||
| 0*SD_SERIALIZE \
|
| 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)
|
static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
|
||||||
{
|
{
|
||||||
struct sched_entity *se = __pick_next_entity(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)
|
if (cfs_rq->next) {
|
||||||
return 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)
|
if (cfs_rq->last) {
|
||||||
return cfs_rq->last;
|
buddy = cfs_rq->last;
|
||||||
|
cfs_rq->last = NULL;
|
||||||
|
if (wakeup_preempt_entity(buddy, se) < 1)
|
||||||
|
return buddy;
|
||||||
|
}
|
||||||
|
|
||||||
return se;
|
return se;
|
||||||
}
|
}
|
||||||
@@ -1654,16 +1663,6 @@ static struct task_struct *pick_next_task_fair(struct rq *rq)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
se = pick_next_entity(cfs_rq);
|
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);
|
set_next_entity(cfs_rq, se);
|
||||||
cfs_rq = group_cfs_rq(se);
|
cfs_rq = group_cfs_rq(se);
|
||||||
} while (cfs_rq);
|
} while (cfs_rq);
|
||||||
|
Reference in New Issue
Block a user