Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Aug 2010 22:17:52 +0000 (15:17 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Aug 2010 22:17:52 +0000 (15:17 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
  percpu: allow limited allocation before slab is online
  percpu: make @dyn_size always mean min dyn_size in first chunk init functions

1  2 
init/main.c

diff --combined init/main.c
index a42fdf4aeba91ada21882d86d552ed722c00eb5a,3ff8dd0fb5120507fe513a68ce65647838c11e28..4ddb53f04f2acb0aefb84df89efc105e8f1ba90e
@@@ -125,9 -125,7 +125,9 @@@ static char *ramdisk_execute_command
  
  #ifdef CONFIG_SMP
  /* Setup configured maximum number of CPUs to activate */
 -unsigned int __initdata setup_max_cpus = NR_CPUS;
 +unsigned int setup_max_cpus = NR_CPUS;
 +EXPORT_SYMBOL(setup_max_cpus);
 +
  
  /*
   * Setup routine for controlling SMP activation
@@@ -424,26 -422,18 +424,26 @@@ static void __init setup_command_line(c
   * gcc-3.4 accidentally inlines this function, so use noinline.
   */
  
 +static __initdata DECLARE_COMPLETION(kthreadd_done);
 +
  static noinline void __init_refok rest_init(void)
        __releases(kernel_lock)
  {
        int pid;
  
        rcu_scheduler_starting();
 +      /*
 +       * We need to spawn init first so that it obtains pid 1, however
 +       * the init task will end up wanting to create kthreads, which, if
 +       * we schedule it before we create kthreadd, will OOPS.
 +       */
        kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
        numa_default_policy();
        pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
        rcu_read_lock();
        kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
        rcu_read_unlock();
 +      complete(&kthreadd_done);
        unlock_kernel();
  
        /*
@@@ -532,6 -522,7 +532,7 @@@ static void __init mm_init(void
        page_cgroup_init_flatmem();
        mem_init();
        kmem_cache_init();
+       percpu_init_late();
        pgtable_cache_init();
        vmalloc_init();
  }
@@@ -865,10 -856,6 +866,10 @@@ static noinline int init_post(void
  
  static int __init kernel_init(void * unused)
  {
 +      /*
 +       * Wait until kthreadd is all set-up.
 +       */
 +      wait_for_completion(&kthreadd_done);
        lock_kernel();
  
        /*