Nothing hypercall-related needs setting up there. Nor do we need to check whether the idle domain is shutting down - it never will.
Signed-off-by: Jan Beulich <[email protected]> --- For vmtrace_alloc_buffer() adding the conditional may be questionable: The function checks d->vmtrace_size first thing, bailing immediately when it's zero (which it always will be for the idle domain). --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -427,12 +427,6 @@ struct vcpu *vcpu_create(struct domain * v->vcpu_id = vcpu_id; v->dirty_cpu = VCPU_CPU_CLEAN; - rwlock_init(&v->virq_lock); - - tasklet_init(&v->continue_hypercall_tasklet, NULL, NULL); - - grant_table_init_vcpu(v); - if ( is_idle_domain(d) ) { v->runstate.state = RUNSTATE_running; @@ -440,6 +434,12 @@ struct vcpu *vcpu_create(struct domain * } else { + rwlock_init(&v->virq_lock); + + tasklet_init(&v->continue_hypercall_tasklet, NULL, NULL); + + grant_table_init_vcpu(v); + v->runstate.state = RUNSTATE_offline; v->runstate.state_entry_time = NOW(); set_bit(_VPF_down, &v->pause_flags); @@ -450,7 +450,7 @@ struct vcpu *vcpu_create(struct domain * if ( sched_init_vcpu(v) != 0 ) goto fail_wq; - if ( vmtrace_alloc_buffer(v) != 0 ) + if ( !is_idle_domain(d) && vmtrace_alloc_buffer(v) != 0 ) goto fail_wq; if ( arch_vcpu_create(v) != 0 ) @@ -468,7 +468,8 @@ struct vcpu *vcpu_create(struct domain * } /* Must be called after making new vcpu visible to for_each_vcpu(). */ - vcpu_check_shutdown(v); + if ( !is_idle_domain(d) ) + vcpu_check_shutdown(v); return v;
