From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v9 06/11] xen: Introduce XEN_DOMCTL_soft_reset Date: Thu, 16 Jul 2015 14:45:07 -0400 Message-ID: <20150716184507.GH14309@x230.dumpdata.com> References: <1437064046-12174-1-git-send-email-vkuznets@redhat.com> <1437064046-12174-7-git-send-email-vkuznets@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZFoAK-0008Ed-DT for xen-devel@lists.xenproject.org; Thu, 16 Jul 2015 18:45:52 +0000 Content-Disposition: inline In-Reply-To: <1437064046-12174-7-git-send-email-vkuznets@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Vitaly Kuznetsov Cc: Wei Liu , Andrew Jones , Keir Fraser , Ian Campbell , Stefano Stabellini , Andrew Cooper , Julien Grall , Ian Jackson , Olaf Hering , Tim Deegan , David Vrabel , Jan Beulich , xen-devel@lists.xenproject.org, Daniel De Graaf List-Id: xen-devel@lists.xenproject.org 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 > --- > 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; > +}