diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-11-24 11:05:13 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-24 11:52:35 -0500 |
commit | 0e3900e6d3b04c44737ebc505604dcd8ed30e354 (patch) | |
tree | 1c791c57282972db3181d4fb1e7c98c5948f96c2 | |
parent | 24600ce89a819a8f2fb4fd69fd777218a82ade20 (diff) |
sched: convert local_cpu_mask to cpumask_var_t.
Impact: (future) size reduction for large NR_CPUS.
Dynamically allocating cpumasks (when CONFIG_CPUMASK_OFFSTACK) saves
space for small nr_cpu_ids but big CONFIG_NR_CPUS. cpumask_var_t
is just a struct cpumask for !CONFIG_CPUMASK_OFFSTACK.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched.c | 1 | ||||
-rw-r--r-- | kernel/sched_rt.c | 13 |
2 files changed, 12 insertions, 2 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 94fa333c1e7c..f2be61870030 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -8018,6 +8018,7 @@ void __init sched_init_smp(void) | |||
8018 | free_cpumask_var(non_isolated_cpus); | 8018 | free_cpumask_var(non_isolated_cpus); |
8019 | 8019 | ||
8020 | alloc_cpumask_var(&fallback_doms, GFP_KERNEL); | 8020 | alloc_cpumask_var(&fallback_doms, GFP_KERNEL); |
8021 | init_sched_rt_class(); | ||
8021 | } | 8022 | } |
8022 | #else | 8023 | #else |
8023 | void __init sched_init_smp(void) | 8024 | void __init sched_init_smp(void) |
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 1fa13624293e..1f0e99d1a8ce 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
@@ -962,7 +962,7 @@ static struct task_struct *pick_next_highest_task_rt(struct rq *rq, int cpu) | |||
962 | return next; | 962 | return next; |
963 | } | 963 | } |
964 | 964 | ||
965 | static DEFINE_PER_CPU(cpumask_t, local_cpu_mask); | 965 | static DEFINE_PER_CPU(cpumask_var_t, local_cpu_mask); |
966 | 966 | ||
967 | static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) | 967 | static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) |
968 | { | 968 | { |
@@ -982,7 +982,7 @@ static inline int pick_optimal_cpu(int this_cpu, cpumask_t *mask) | |||
982 | static int find_lowest_rq(struct task_struct *task) | 982 | static int find_lowest_rq(struct task_struct *task) |
983 | { | 983 | { |
984 | struct sched_domain *sd; | 984 | struct sched_domain *sd; |
985 | cpumask_t *lowest_mask = &__get_cpu_var(local_cpu_mask); | 985 | cpumask_t *lowest_mask = __get_cpu_var(local_cpu_mask); |
986 | int this_cpu = smp_processor_id(); | 986 | int this_cpu = smp_processor_id(); |
987 | int cpu = task_cpu(task); | 987 | int cpu = task_cpu(task); |
988 | 988 | ||
@@ -1551,3 +1551,12 @@ static void print_rt_stats(struct seq_file *m, int cpu) | |||
1551 | rcu_read_unlock(); | 1551 | rcu_read_unlock(); |
1552 | } | 1552 | } |
1553 | #endif /* CONFIG_SCHED_DEBUG */ | 1553 | #endif /* CONFIG_SCHED_DEBUG */ |
1554 | |||
1555 | /* Note that this is never called for !SMP, but that's OK. */ | ||
1556 | static inline void init_sched_rt_class(void) | ||
1557 | { | ||
1558 | unsigned int i; | ||
1559 | |||
1560 | for_each_possible_cpu(i) | ||
1561 | alloc_cpumask_var(&per_cpu(local_cpu_mask, i), GFP_KERNEL); | ||
1562 | } | ||