|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] domain: skip more stuff for idle's vCPU-s in vcpu_create()
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 <jbeulich@xxxxxxxx>
---
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;
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |