diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c index cfca5a7..2f2aa73 100644 --- a/xen/common/sched_credit2.c +++ b/xen/common/sched_credit2.c @@ -1936,12 +1936,8 @@ static void init_pcpu(const struct scheduler *ops, int cpu) } /* Figure out which runqueue to put it in */ - rqi = 0; - - /* Figure out which runqueue to put it in */ - /* NB: cpu 0 doesn't get a STARTING callback, so we hard-code it to runqueue 0. */ - if ( cpu == 0 ) - rqi = 0; + if ( system_state == SYS_STATE_boot ) + rqi = boot_cpu_to_socket(cpu); else rqi = cpu_to_socket(cpu); @@ -1986,9 +1982,13 @@ static void init_pcpu(const struct scheduler *ops, int cpu) static void * csched2_alloc_pdata(const struct scheduler *ops, int cpu) { - /* Check to see if the cpu is online yet */ - /* Note: cpu 0 doesn't get a STARTING callback */ - if ( cpu == 0 || cpu_to_socket(cpu) >= 0 ) + /* + * Actual initialization is deferred to when the pCPU will be + * online, via a STARTING callback. The only exception is + * the boot cpu, which does not get such a notification, and + * hence needs to be taken care of here. + */ + if ( system_state == SYS_STATE_boot ) init_pcpu(ops, cpu); else printk("%s: cpu %d not online yet, deferring initializatgion\n",