sched: use slab in cpupri_init()
authorPekka Enberg <penberg@cs.helsinki.fi>
Thu, 11 Jun 2009 05:41:22 +0000 (08:41 +0300)
committerPekka Enberg <penberg@cs.helsinki.fi>
Thu, 11 Jun 2009 16:27:12 +0000 (19:27 +0300)
Lets not use the bootmem allocator in cpupri_init() as slab is already up when
it is run.

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
kernel/sched.c
kernel/sched_cpupri.c

index 12cc09cf51478ad6120a7fd5a92009b895ba564a..dcf2dc28931ad508363a7861a87a40c11ff7f4e5 100644 (file)
@@ -7795,7 +7795,7 @@ static int __init_refok init_rootdomain(struct root_domain *rd, bool bootmem)
        if (!alloc_cpumask_var(&rd->rto_mask, gfp))
                goto free_online;
 
-       if (cpupri_init(&rd->cpupri, false) != 0)
+       if (cpupri_init(&rd->cpupri, bootmem) != 0)
                goto free_rto_mask;
        return 0;
 
index 344712a5e3eddeedd4072ea8754d115dec8809ad..7deffc9f0e5f51f4f052563f7ead2d18aeb22875 100644 (file)
@@ -154,8 +154,12 @@ void cpupri_set(struct cpupri *cp, int cpu, int newpri)
  */
 int __init_refok cpupri_init(struct cpupri *cp, bool bootmem)
 {
+       gfp_t gfp = GFP_KERNEL;
        int i;
 
+       if (bootmem)
+               gfp = GFP_NOWAIT;
+
        memset(cp, 0, sizeof(*cp));
 
        for (i = 0; i < CPUPRI_NR_PRIORITIES; i++) {
@@ -163,9 +167,7 @@ int __init_refok cpupri_init(struct cpupri *cp, bool bootmem)
 
                spin_lock_init(&vec->lock);
                vec->count = 0;
-               if (bootmem)
-                       alloc_bootmem_cpumask_var(&vec->mask);
-               else if (!zalloc_cpumask_var(&vec->mask, GFP_KERNEL))
+               if (!zalloc_cpumask_var(&vec->mask, gfp))
                        goto cleanup;
        }