|
@@ -4817,7 +4817,7 @@ void show_state(void)
|
|
|
* NOTE: this function does not set the idle thread's NEED_RESCHED
|
|
|
* flag, to make booting more robust.
|
|
|
*/
|
|
|
-void __devinit init_idle(struct task_struct *idle, int cpu)
|
|
|
+void __cpuinit init_idle(struct task_struct *idle, int cpu)
|
|
|
{
|
|
|
struct rq *rq = cpu_rq(cpu);
|
|
|
unsigned long flags;
|
|
@@ -5461,7 +5461,7 @@ static void cpu_attach_domain(struct sched_domain *sd, int cpu)
|
|
|
}
|
|
|
|
|
|
/* cpus with isolated domains */
|
|
|
-static cpumask_t __devinitdata cpu_isolated_map = CPU_MASK_NONE;
|
|
|
+static cpumask_t __cpuinitdata cpu_isolated_map = CPU_MASK_NONE;
|
|
|
|
|
|
/* Setup the mask of cpus configured for isolated domains */
|
|
|
static int __init isolated_cpu_setup(char *str)
|
|
@@ -6747,11 +6747,20 @@ static int update_sched_domains(struct notifier_block *nfb,
|
|
|
|
|
|
void __init sched_init_smp(void)
|
|
|
{
|
|
|
+ cpumask_t non_isolated_cpus;
|
|
|
+
|
|
|
lock_cpu_hotplug();
|
|
|
arch_init_sched_domains(&cpu_online_map);
|
|
|
+ cpus_andnot(non_isolated_cpus, cpu_online_map, cpu_isolated_map);
|
|
|
+ if (cpus_empty(non_isolated_cpus))
|
|
|
+ cpu_set(smp_processor_id(), non_isolated_cpus);
|
|
|
unlock_cpu_hotplug();
|
|
|
/* XXX: Theoretical race here - CPU may be hotplugged now */
|
|
|
hotcpu_notifier(update_sched_domains, 0);
|
|
|
+
|
|
|
+ /* Move init over to a non-isolated CPU */
|
|
|
+ if (set_cpus_allowed(current, non_isolated_cpus) < 0)
|
|
|
+ BUG();
|
|
|
}
|
|
|
#else
|
|
|
void __init sched_init_smp(void)
|