From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Wei Liu <wei.liu2@citrix.com>, Andrew Jones <drjones@redhat.com>,
Keir Fraser <keir@xen.org>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Julien Grall <julien.grall@linaro.org>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Olaf Hering <olaf@aepfle.de>, Tim Deegan <tim@xen.org>,
David Vrabel <david.vrabel@citrix.com>,
Jan Beulich <jbeulich@suse.com>,
xen-devel@lists.xenproject.org,
Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: Re: [PATCH v10 06/11] xen: Introduce XEN_DOMCTL_soft_reset
Date: Tue, 11 Aug 2015 15:57:09 -0400 [thread overview]
Message-ID: <20150811195709.GB7765@l.oracle.com> (raw)
In-Reply-To: <1438090096-8297-7-git-send-email-vkuznets@redhat.com>
On Tue, Jul 28, 2015 at 03:28:11PM +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@redhat.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>
> ---
> Changes since v9:
> - Unlock shutdown_lock on !v->paused_for_shutdown check failure
> [Konrad Rzeszutek Wilk]
> - Add Acked-by: [Jan Beulich]
> ---
> xen/common/domain.c | 47 +++++++++++++++++++++++++++++++++++++--------
> xen/common/domctl.c | 9 +++++++++
> xen/include/public/domctl.h | 1 +
> xen/include/xen/sched.h | 2 ++
> 4 files changed, 51 insertions(+), 8 deletions(-)
>
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index 1b9fcfc..4c8e6a2 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;
> +}
> +
> 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);
> }
>
> @@ -1038,6 +1045,32 @@ void domain_unpause_except_self(struct domain *d)
> domain_unpause(d);
> }
>
> +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 )
> + {
> + spin_unlock(&d->shutdown_lock);
> + return -EINVAL;
> + }
> + spin_unlock(&d->shutdown_lock);
> +
> + rc = evtchn_reset(d);
You do ignore the 'rc' value? In which case why not just
do:
(void)evtchn_reset(d);
Unless you want to return the 'rc' ?
> +
> + grant_table_warn_active_grants(d);
> +
> + for_each_vcpu ( d, v )
> + unmap_vcpu_info(v);
> +
> + domain_resume(d);
> +
> + return 0;
> +}
> +
> int vcpu_reset(struct vcpu *v)
> {
> struct domain *d = v->domain;
> @@ -1149,8 +1182,7 @@ int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned offset)
>
> /*
> * Unmap the vcpu info page if the guest decided to place it somewhere
> - * else. This is only used from arch_domain_destroy, so there's no
> - * need to do anything clever.
> + * else. This is used from arch_domain_destroy and domain_soft_reset.
> */
> void unmap_vcpu_info(struct vcpu *v)
> {
> @@ -1163,8 +1195,7 @@ void unmap_vcpu_info(struct vcpu *v)
> unmap_domain_page_global((void *)
> ((unsigned long)v->vcpu_info & PAGE_MASK));
>
> - v->vcpu_info = &dummy_vcpu_info;
> - v->vcpu_info_mfn = INVALID_MFN;
> + vcpu_info_reset(v);
>
> put_page_and_type(mfn_to_page(mfn));
> }
> diff --git a/xen/common/domctl.c b/xen/common/domctl.c
> index 7f959f3..41891b1 100644
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -704,6 +704,15 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
> break;
> }
>
> + case XEN_DOMCTL_soft_reset:
> + if ( d == current->domain )
> + {
> + ret = -EINVAL;
> + break;
> + }
> + ret = domain_soft_reset(d);
> + break;
> +
> case XEN_DOMCTL_destroydomain:
> ret = domain_kill(d);
> if ( ret == -ERESTART )
> diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
> index 675f021..794d4d5 100644
> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -1139,6 +1139,7 @@ struct xen_domctl {
> #define XEN_DOMCTL_psr_cmt_op 75
> #define XEN_DOMCTL_monitor_op 77
> #define XEN_DOMCTL_psr_cat_op 78
> +#define XEN_DOMCTL_soft_reset 79
> #define XEN_DOMCTL_gdbsx_guestmemio 1000
> #define XEN_DOMCTL_gdbsx_pausevcpu 1001
> #define XEN_DOMCTL_gdbsx_unpausevcpu 1002
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 73d3bc8..8053b5a 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -610,6 +610,8 @@ void domain_shutdown(struct domain *d, u8 reason);
> void domain_resume(struct domain *d);
> void domain_pause_for_debugger(void);
>
> +int domain_soft_reset(struct domain *d);
> +
> int vcpu_start_shutdown_deferral(struct vcpu *v);
> void vcpu_end_shutdown_deferral(struct vcpu *v);
>
> --
> 2.4.3
>
next prev parent reply other threads:[~2015-08-11 19:57 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-28 13:28 [PATCH v10 00/11] toolstack-assisted approach to PVHVM guest kexec Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 01/11] xen: introduce SHUTDOWN_soft_reset shutdown reason Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 02/11] libxl: support " Vitaly Kuznetsov
2015-08-11 19:54 ` Konrad Rzeszutek Wilk
2015-08-31 14:04 ` Wei Liu
2015-07-28 13:28 ` [PATCH v10 03/11] xl: introduce enum domain_restart_type Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 04/11] xen: evtchn: make evtchn_reset() ready for soft reset Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 05/11] xen: grant_table: implement grant_table_warn_active_grants() Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 06/11] xen: Introduce XEN_DOMCTL_soft_reset Vitaly Kuznetsov
2015-08-11 19:57 ` Konrad Rzeszutek Wilk [this message]
2015-08-12 8:41 ` Jan Beulich
2015-08-12 9:19 ` Vitaly Kuznetsov
2015-08-12 9:43 ` Jan Beulich
2015-07-28 13:28 ` [PATCH v10 07/11] flask: DOMCTL_soft_reset support Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 08/11] xen: arch-specific hooks for domain_soft_reset() Vitaly Kuznetsov
2015-08-11 19:59 ` Konrad Rzeszutek Wilk
2015-08-17 15:38 ` Jan Beulich
2015-09-01 16:10 ` Ian Campbell
2015-07-28 13:28 ` [PATCH v10 09/11] libxc: support XEN_DOMCTL_soft_reset operation Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 10/11] libxc: add XC_DEVICE_MODEL_SAVE_FILE Vitaly Kuznetsov
2015-07-28 13:28 ` [PATCH v10 11/11] (lib)xl: soft reset support Vitaly Kuznetsov
2015-08-11 20:04 ` Konrad Rzeszutek Wilk
2015-08-31 14:14 ` Wei Liu
2015-09-01 11:52 ` Vitaly Kuznetsov
2015-09-01 17:26 ` Vitaly Kuznetsov
2015-09-01 17:30 ` Wei Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150811195709.GB7765@l.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=david.vrabel@citrix.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=drjones@redhat.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@linaro.org \
--cc=keir@xen.org \
--cc=olaf@aepfle.de \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=vkuznets@redhat.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.