diff -Naurp linux-2.6.8-rc2-mm2-cs3/include/linux/cpuset.h linux-2.6.8-rc2-mm2-cs3.new/include/linux/cpuset.h --- linux-2.6.8-rc2-mm2-cs3/include/linux/cpuset.h 2004-08-05 17:22:31.000000000 +0530 +++ linux-2.6.8-rc2-mm2-cs3.new/include/linux/cpuset.h 2004-08-12 18:58:51.000000000 +0530 @@ -15,6 +15,7 @@ #ifdef CONFIG_CPUSETS extern int cpuset_init(void); +extern void cpuset_init_smp(void); extern void cpuset_fork(struct task_struct *p); extern void cpuset_exit(struct task_struct *p); extern const cpumask_t cpuset_cpus_allowed(const struct task_struct *p); diff -Naurp linux-2.6.8-rc2-mm2-cs3/init/main.c linux-2.6.8-rc2-mm2-cs3.new/init/main.c --- linux-2.6.8-rc2-mm2-cs3/init/main.c 2004-08-05 17:22:31.000000000 +0530 +++ linux-2.6.8-rc2-mm2-cs3.new/init/main.c 2004-08-12 18:06:54.000000000 +0530 @@ -708,6 +708,8 @@ static int init(void * unused) smp_init(); sched_init_smp(); + cpuset_init_smp(); + /* * Do this before initcalls, because some drivers want to access * firmware files. diff -Naurp linux-2.6.8-rc2-mm2-cs3/kernel/cpuset.c linux-2.6.8-rc2-mm2-cs3.new/kernel/cpuset.c --- linux-2.6.8-rc2-mm2-cs3/kernel/cpuset.c 2004-08-11 22:02:47.000000000 +0530 +++ linux-2.6.8-rc2-mm2-cs3.new/kernel/cpuset.c 2004-08-12 18:55:34.000000000 +0530 @@ -1270,7 +1270,6 @@ int __init cpuset_init(void) struct dentry *root; int err; - top_cpuset.cpus_allowed = cpu_possible_map; top_cpuset.mems_allowed = node_possible_map; init_task.cpuset = &top_cpuset; @@ -1296,6 +1295,17 @@ out: } /** + * cpuset_init_smp - initialize cpus_allowed + * + * Description: Initialize cpus_allowed after cpu_possible_map is initialized + **/ + +void __init cpuset_init_smp(void) +{ + top_cpuset.cpus_allowed = cpu_possible_map; +} + +/** * cpuset_fork - attach newly forked task to its parents cpuset. * @p: pointer to task_struct of forking parent process. *