[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 06/11] xen: Introduce XEN_DOMCTL_soft_reset
On Thu, Jul 16, 2015 at 06:27:21PM +0200, Vitaly Kuznetsov wrote: > New domctl resets state for a domain allowing it to 'start over': register > vcpu_info, switch to FIFO ABI for event channels. Still active grants are > being logged to help debugging misbehaving backends. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > --- > Changes since v8: > - Introduce vcpu_info_reset() helper. [Konrad Rzeszutek Wilk] > - Take shutdown_lock while checking v->paused_for_shutdown in > domain_soft_reset() [Konrad Rzeszutek Wilk] > --- > xen/common/domain.c | 44 ++++++++++++++++++++++++++++++++++++-------- > xen/common/domctl.c | 9 +++++++++ > xen/include/public/domctl.h | 1 + > xen/include/xen/sched.h | 2 ++ > 4 files changed, 48 insertions(+), 8 deletions(-) > > diff --git a/xen/common/domain.c b/xen/common/domain.c > index 8efef5c..4f805d5 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -110,6 +110,16 @@ static void vcpu_check_shutdown(struct vcpu *v) > spin_unlock(&d->shutdown_lock); > } > > +static void vcpu_info_reset(struct vcpu *v) > +{ > + struct domain *d = v->domain; > + > + v->vcpu_info = ((v->vcpu_id < XEN_LEGACY_MAX_VCPUS) > + ? (vcpu_info_t *)&shared_info(d, vcpu_info[v->vcpu_id]) > + : &dummy_vcpu_info); > + v->vcpu_info_mfn = INVALID_MFN; > +} Great! > + > struct vcpu *alloc_vcpu( > struct domain *d, unsigned int vcpu_id, unsigned int cpu_id) > { > @@ -145,10 +155,7 @@ struct vcpu *alloc_vcpu( > v->runstate.state = RUNSTATE_offline; > v->runstate.state_entry_time = NOW(); > set_bit(_VPF_down, &v->pause_flags); > - v->vcpu_info = ((vcpu_id < XEN_LEGACY_MAX_VCPUS) > - ? (vcpu_info_t *)&shared_info(d, vcpu_info[vcpu_id]) > - : &dummy_vcpu_info); > - v->vcpu_info_mfn = INVALID_MFN; > + vcpu_info_reset(v); > init_waitqueue_vcpu(v); > } > > @@ -1010,6 +1017,29 @@ int domain_unpause_by_systemcontroller(struct domain > *d) > return 0; > } > > +int domain_soft_reset(struct domain *d) > +{ > + struct vcpu *v; > + int rc; > + > + spin_lock(&d->shutdown_lock); > + for_each_vcpu ( d, v ) > + if ( !v->paused_for_shutdown ) > + return -EINVAL; Ahem. You leave the spinlock still locked :-( > + spin_unlock(&d->shutdown_lock); > + > + rc = evtchn_reset(d); > + > + grant_table_warn_active_grants(d); > + > + for_each_vcpu ( d, v ) > + unmap_vcpu_info(v); > + > + domain_resume(d); > + > + return 0; > +} _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |