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 v8 06/11] xen: Introduce XEN_DOMCTL_soft_reset
Date: Fri, 10 Jul 2015 12:30:55 -0400 [thread overview]
Message-ID: <20150710163055.GC24518@l.oracle.com> (raw)
In-Reply-To: <1435075913-335-7-git-send-email-vkuznets@redhat.com>
On Tue, Jun 23, 2015 at 06:11:48PM +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>
> ---
> xen/common/domain.c | 29 ++++++++++++++++++++++++++---
> xen/common/domctl.c | 9 +++++++++
> xen/include/public/domctl.h | 1 +
> xen/include/xen/sched.h | 2 ++
> 4 files changed, 38 insertions(+), 3 deletions(-)
>
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index 3bc52e6..ade80ff 100644
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -1010,6 +1010,26 @@ int domain_unpause_by_systemcontroller(struct domain *d)
> return 0;
> }
>
> +int domain_soft_reset(struct domain *d)
> +{
> + struct vcpu *v;
> +
> + for_each_vcpu ( d, v )
> + if ( !v->paused_for_shutdown )
> + return -EINVAL;
I think you need to hold a lock to make sure that nobody else
during this loop messes with 'v->paused_for_shutdown' value.
That is the shutdown_lock.
> +
> + evtchn_reset(d);
> +
> + 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;
> @@ -1121,12 +1141,12 @@ 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)
> {
> unsigned long mfn;
> + struct domain *d = v->domain;
>
> if ( v->vcpu_info_mfn == INVALID_MFN )
> return;
> @@ -1135,7 +1155,10 @@ 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 = ((v->vcpu_id < XEN_LEGACY_MAX_VCPUS)
> + ? (vcpu_info_t *)&shared_info(d, vcpu_info[v->vcpu_id])
> + : &dummy_vcpu_info);
> +
Could you explain that bit please? Why not use dummy_vcpu_info?
Ah, you are doing what alloc_vcpu does.
> v->vcpu_info_mfn = INVALID_MFN;
Perhaps we should jus thave a function called 'vcpu_info_reset' that
would do this - and called in both places?
>
> put_page_and_type(mfn_to_page(mfn));
> diff --git a/xen/common/domctl.c b/xen/common/domctl.c
> index ce517a7..8cb6a2a 100644
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -703,6 +703,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 bc45ea5..5b4ba6b 100644
> --- a/xen/include/public/domctl.h
> +++ b/xen/include/public/domctl.h
> @@ -1114,6 +1114,7 @@ struct xen_domctl {
> #define XEN_DOMCTL_setvnumainfo 74
> #define XEN_DOMCTL_psr_cmt_op 75
> #define XEN_DOMCTL_monitor_op 77
> +#define XEN_DOMCTL_soft_reset 78
> #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 d810e1c..1120741 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -609,6 +609,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.2
>
next prev parent reply other threads:[~2015-07-10 16:31 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-23 16:11 [PATCH v8 00/11] toolstack-assisted approach to PVHVM guest kexec Vitaly Kuznetsov
2015-06-23 16:11 ` [PATCH v8 01/11] xen: introduce SHUTDOWN_soft_reset shutdown reason Vitaly Kuznetsov
2015-07-07 20:44 ` Konrad Rzeszutek Wilk
2015-07-14 16:10 ` Ian Jackson
2015-07-15 8:42 ` Vitaly Kuznetsov
2015-06-23 16:11 ` [PATCH v8 02/11] libxl: support " Vitaly Kuznetsov
2015-07-07 20:47 ` Konrad Rzeszutek Wilk
2015-07-14 16:15 ` Ian Jackson
2015-07-15 8:43 ` Vitaly Kuznetsov
2015-06-23 16:11 ` [PATCH v8 03/11] xl: introduce enum domain_restart_type Vitaly Kuznetsov
2015-07-07 20:48 ` Konrad Rzeszutek Wilk
2015-06-23 16:11 ` [PATCH v8 04/11] xen: evtchn: make evtchn_reset() ready for soft reset Vitaly Kuznetsov
2015-07-10 16:20 ` Konrad Rzeszutek Wilk
2015-06-23 16:11 ` [PATCH v8 05/11] xen: grant_table: implement grant_table_warn_active_grants() Vitaly Kuznetsov
2015-07-10 16:24 ` Konrad Rzeszutek Wilk
2015-07-13 8:45 ` Jan Beulich
2015-07-13 9:08 ` Ian Campbell
2015-07-13 9:30 ` Jan Beulich
2015-07-13 9:35 ` Vitaly Kuznetsov
2015-07-13 13:44 ` Vitaly Kuznetsov
2015-07-13 14:24 ` Konrad Rzeszutek Wilk
2015-06-23 16:11 ` [PATCH v8 06/11] xen: Introduce XEN_DOMCTL_soft_reset Vitaly Kuznetsov
2015-07-10 16:30 ` Konrad Rzeszutek Wilk [this message]
2015-06-23 16:11 ` [PATCH v8 07/11] flask: DOMCTL_soft_reset support Vitaly Kuznetsov
2015-07-13 19:43 ` Daniel De Graaf
2015-06-23 16:11 ` [PATCH v8 08/11] xen: arch-specific hooks for domain_soft_reset() Vitaly Kuznetsov
2015-07-10 16:54 ` Konrad Rzeszutek Wilk
2015-07-14 15:52 ` Vitaly Kuznetsov
2015-07-14 15:57 ` Konrad Rzeszutek Wilk
2015-07-14 16:07 ` Vitaly Kuznetsov
2015-07-15 20:19 ` Julien Grall
2015-07-16 11:36 ` Vitaly Kuznetsov
2015-07-16 11:57 ` Julien Grall
2015-06-23 16:11 ` [PATCH v8 09/11] libxc: support XEN_DOMCTL_soft_reset operation Vitaly Kuznetsov
2015-06-25 13:52 ` Wei Liu
2015-07-10 16:55 ` Konrad Rzeszutek Wilk
2015-07-14 16:17 ` Ian Jackson
2015-06-23 16:11 ` [PATCH v8 10/11] libxc: add XC_DEVICE_MODEL_SAVE_FILE Vitaly Kuznetsov
2015-06-23 16:11 ` [PATCH v8 11/11] (lib)xl: soft reset support Vitaly Kuznetsov
2015-07-10 16:59 ` Konrad Rzeszutek Wilk
2015-07-14 16:19 ` Ian Jackson
2015-07-15 8:50 ` Vitaly Kuznetsov
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=20150710163055.GC24518@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.