diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-12-01 06:21:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-09 04:03:08 -0500 |
commit | fb58bac5c75bfff8bbf7d02071a10a62f32fe28b (patch) | |
tree | b2ff68b388efa043c152d75254da27171ea5e586 /kernel | |
parent | 6cecd084d0fd27bb1e498e2829fd45846d806856 (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>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched_fair.c | 9 |
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 | ||
1531 | out: | ||
1532 | rcu_read_unlock(); | ||
1533 | return new_cpu; | 1528 | return new_cpu; |
1534 | } | 1529 | } |
1535 | #endif /* CONFIG_SMP */ | 1530 | #endif /* CONFIG_SMP */ |