aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2009-12-01 06:21:47 -0500
committerIngo Molnar <mingo@elte.hu>2009-12-09 04:03:08 -0500
commitfb58bac5c75bfff8bbf7d02071a10a62f32fe28b (patch)
treeb2ff68b388efa043c152d75254da27171ea5e586
parent6cecd084d0fd27bb1e498e2829fd45846d806856 (diff)
sched: Remove unnecessary RCU exclusion
As Nick pointed out, and realized by myself when doing: sched: Fix balance vs hotplug race the patch: sched: for_each_domain() vs RCU is wrong, sched_domains are freed after synchronize_sched(), which means disabling preemption is enough. Reported-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--kernel/sched_fair.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index e9f5daee12c7..c163a285bf05 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1403,7 +1403,6 @@ static int select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flag
1403 new_cpu = prev_cpu; 1403 new_cpu = prev_cpu;
1404 } 1404 }
1405 1405
1406 rcu_read_lock();
1407 for_each_domain(cpu, tmp) { 1406 for_each_domain(cpu, tmp) {
1408 /* 1407 /*
1409 * If power savings logic is enabled for a domain, see if we 1408 * If power savings logic is enabled for a domain, see if we
@@ -1484,10 +1483,8 @@ static int select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flag
1484 update_shares(tmp); 1483 update_shares(tmp);
1485 } 1484 }
1486 1485
1487 if (affine_sd && wake_affine(affine_sd, p, sync)) { 1486 if (affine_sd && wake_affine(affine_sd, p, sync))
1488 new_cpu = cpu; 1487 return cpu;
1489 goto out;
1490 }
1491 1488
1492 while (sd) { 1489 while (sd) {
1493 int load_idx = sd->forkexec_idx; 1490 int load_idx = sd->forkexec_idx;
@@ -1528,8 +1525,6 @@ static int select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flag
1528 /* while loop will break here if sd == NULL */ 1525 /* while loop will break here if sd == NULL */
1529 } 1526 }
1530 1527
1531out:
1532 rcu_read_unlock();
1533 return new_cpu; 1528 return new_cpu;
1534} 1529}
1535#endif /* CONFIG_SMP */ 1530#endif /* CONFIG_SMP */