aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2011-08-24 11:32:21 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2011-08-24 11:32:21 -0400
commite3a21fa46e1391528d03bada261b78ec82ba0b53 (patch)
tree3c5f0986c357e9a935c99388ba7fb1cd3553dc56
parent4576ff97efe90469f848a6849a41ae0abfcd9a30 (diff)
Prevent Linux to send IPI and queue tasks on remote CPUs.wip-merge-3.0
Whether to send IPIs and enqueue tasks on remote runqueues is plugin-specific. The recent ttwu_queue() mechanism (by calling ttwu_queue_remote()) interferes with Litmus plugin decisions. As a side effect, note that this patch removes a synchronization point for CPUs clocks (sched_clock_cpu()).
-rw-r--r--kernel/sched.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 0c8b6e1e9e79..8abc7b0442c3 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2666,7 +2666,12 @@ static void ttwu_queue(struct task_struct *p, int cpu)
2666 struct rq *rq = cpu_rq(cpu); 2666 struct rq *rq = cpu_rq(cpu);
2667 2667
2668#if defined(CONFIG_SMP) 2668#if defined(CONFIG_SMP)
2669 if (sched_feat(TTWU_QUEUE) && cpu != smp_processor_id()) { 2669 /*
2670 * LITMUS^RT: whether to send an IPI to the remote CPU
2671 * is plugin specific.
2672 */
2673 if (!is_realtime(p) &&
2674 sched_feat(TTWU_QUEUE) && cpu != smp_processor_id()) {
2670 sched_clock_cpu(cpu); /* sync clocks x-cpu */ 2675 sched_clock_cpu(cpu); /* sync clocks x-cpu */
2671 ttwu_queue_remote(p, cpu); 2676 ttwu_queue_remote(p, cpu);
2672 return; 2677 return;