aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-01-21 08:49:52 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2010-01-21 08:49:52 -0800
commit341031caec0cd730e84d248d95851bf54ec4e41f (patch)
treef9531f3bef8446e0eb2f9f4ba1ed6fa1000585c8
parent836f48c5f8c6ef004419f1605514aa05eb58eefb (diff)
parent6d558c3ac9b6508d26fd5cadccce51fc9d726b1c (diff)
downloadlinux-341031caec0cd730e84d248d95851bf54ec4e41f.tar.gz
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: Reassign prev and switch_count when reacquire_kernel_lock() fail sched: Fix vmark regression on big machines
-rw-r--r--include/linux/topology.h2
-rw-r--r--kernel/sched.c5
-rw-r--r--kernel/sched_fair.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/topology.h b/include/linux/topology.h
index 57e63579bfd..5b81156780b 100644
--- a/include/linux/topology.h
+++ b/include/linux/topology.h
@@ -99,7 +99,7 @@ int arch_update_cpu_topology(void);
| 1*SD_WAKE_AFFINE \
| 1*SD_SHARE_CPUPOWER \
| 0*SD_POWERSAVINGS_BALANCE \
- | 0*SD_SHARE_PKG_RESOURCES \
+ | 1*SD_SHARE_PKG_RESOURCES \
| 0*SD_SERIALIZE \
| 0*SD_PREFER_SIBLING \
, \
diff --git a/kernel/sched.c b/kernel/sched.c
index c535cc4f642..4508fe7048b 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -5530,8 +5530,11 @@ need_resched_nonpreemptible:
post_schedule(rq);
- if (unlikely(reacquire_kernel_lock(current) < 0))
+ if (unlikely(reacquire_kernel_lock(current) < 0)) {
+ prev = rq->curr;
+ switch_count = &prev->nivcsw;
goto need_resched_nonpreemptible;
+ }
preempt_enable_no_resched();
if (need_resched())
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 42ac3c9f66f..8fe7ee81c55 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1508,7 +1508,7 @@ static int select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flag
* If there's an idle sibling in this domain, make that
* the wake_affine target instead of the current cpu.
*/
- if (tmp->flags & SD_PREFER_SIBLING)
+ if (tmp->flags & SD_SHARE_PKG_RESOURCES)
target = select_idle_sibling(p, tmp, target);
if (target >= 0) {