static struct vcpu *__init setup_dom0_vcpu(struct domain *d,
unsigned int vcpu_id,
- unsigned int cpu)
+ unsigned int prev_cpu)
{
+ unsigned int cpu = cpumask_cycle(prev_cpu, &dom0_cpus);
struct vcpu *v = alloc_vcpu(d, vcpu_id, cpu);
if ( v )
return NULL;
dom0->max_vcpus = max_vcpus;
- return setup_dom0_vcpu(dom0, 0, cpumask_first(&dom0_cpus));
+ return setup_dom0_vcpu(dom0, 0,
+ cpumask_last(&dom0_cpus) /* so it wraps around to first pcpu */);
}
#ifdef CONFIG_SHADOW_PAGING
cpu = v->processor;
for ( i = 1; i < d->max_vcpus; i++ )
{
- cpu = cpumask_cycle(cpu, &dom0_cpus);
- setup_dom0_vcpu(d, i, cpu);
+ const struct vcpu *p = setup_dom0_vcpu(d, i, cpu);
+
+ if ( p )
+ cpu = p->processor;
}
d->arch.paging.mode = 0;
cpu = v->processor;
for ( i = 1; i < d->max_vcpus; i++ )
{
- cpu = cpumask_cycle(cpu, &dom0_cpus);
- setup_dom0_vcpu(d, i, cpu);
+ const struct vcpu *p = setup_dom0_vcpu(d, i, cpu);
+
+ if ( p )
+ cpu = p->processor;
}
rc = arch_set_info_hvm_guest(v, &cpu_ctx);