From: Anthony PERARD <anthony.perard@citrix.com>
To: "Liu, Jinsong" <jinsong.liu@intel.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Ian Campbell <Ian.Campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH V2] qemu-xen: HVM domain S3 bugfix
Date: Fri, 30 Aug 2013 16:00:51 +0100 [thread overview]
Message-ID: <5220B3A3.4000100@citrix.com> (raw)
In-Reply-To: <DE8DF0795D48FD4CA783C40EC8292335013461FE@SHSMSX101.ccr.corp.intel.com>
On 29/08/13 09:25, Liu, Jinsong wrote:
> Currently HVM S3 has a bug coming from the difference between
> qemu-traditioanl and qemu-xen. For qemu-traditional, the way
> to resume from hvm s3 is via 'xl trigger' command. However,
> for qemu-xen, the way to resume from hvm s3 inherited from
> standard qemu, i.e. via QMP, and it doesn't work under Xen.
>
> The root cause is, for qemu-xen, 'xl trigger' command didn't reset
> devices, while QMP didn't unpause hvm domain though they did qemu
> system reset.
>
> We have 2 patches to fix the HVM S3 bug: qemu-xen patch and xl patch.
> This patch is the qemu-xen patch. It registers a wakeup later notify,
> so that when 'xl trigger' command invokes QMP system_wakeup and after
> qemu system reset, it hypercalls to hypervisor to unpause domain, then
> hvm S3 resumes successfully.
>
> Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>
> ---
> vl.c | 13 +++++++++++++
> xen-all.c | 9 +++++++++
> 2 files changed, 22 insertions(+), 0 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 5314f55..aeebd83 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1478,6 +1478,8 @@ static NotifierList suspend_notifiers =
> NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
> static NotifierList wakeup_notifiers =
> NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
> +static NotifierList wakeup_later_notifiers =
> + NOTIFIER_LIST_INITIALIZER(wakeup_later_notifiers);
Maybe late_wakeup_notifiers would be a better description for this list.
> static uint32_t wakeup_reason_mask = ~0;
> static RunState vmstop_requested = RUN_STATE_MAX;
>
> @@ -1625,6 +1627,11 @@ static void qemu_system_suspend(void)
> monitor_protocol_event(QEVENT_SUSPEND, NULL);
> }
>
> +static void qemu_system_wakeup(void)
> +{
> + notifier_list_notify(&wakeup_later_notifiers, NULL);
> +}
> +
I don't think it's useful to have this function with only the
list_notify. You could call directly list_notify in the
main_loop_should_exit() function bellow.
> void qemu_system_suspend_request(void)
> {
> if (runstate_check(RUN_STATE_SUSPENDED)) {
> @@ -1668,6 +1675,11 @@ void qemu_register_wakeup_notifier(Notifier *notifier)
> notifier_list_add(&wakeup_notifiers, notifier);
> }
>
> +void qemu_register_wakeup_later_notifier(Notifier *notifier)
> +{
> + notifier_list_add(&wakeup_later_notifiers, notifier);
> +}
> +
> void qemu_system_killed(int signal, pid_t pid)
> {
> shutdown_signal = signal;
> @@ -1744,6 +1756,7 @@ static bool main_loop_should_exit(void)
> cpu_synchronize_all_states();
> qemu_system_reset(VMRESET_SILENT);
> resume_all_vcpus();
> + qemu_system_wakeup();
> monitor_protocol_event(QEVENT_WAKEUP, NULL);
> }
> if (qemu_powerdown_requested()) {
> diff --git a/xen-all.c b/xen-all.c
> index 15be8ed..3353f63 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -97,6 +97,7 @@ typedef struct XenIOState {
>
> Notifier exit;
> Notifier suspend;
> + Notifier wakeup_later;
> } XenIOState;
>
> /* Xen specific function for piix pci */
> @@ -139,6 +140,11 @@ static void xen_suspend_notifier(Notifier *notifier, void *data)
> xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 3);
> }
>
> +static void xen_wakeup_later_notifier(Notifier *notifier, void *data)
> +{
> + xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 0);
> +}
> +
> /* Xen Interrupt Controller */
>
> static void xen_set_irq(void *opaque, int irq, int level)
> @@ -1106,6 +1112,9 @@ int xen_hvm_init(void)
> state->suspend.notify = xen_suspend_notifier;
> qemu_register_suspend_notifier(&state->suspend);
>
> + state->wakeup_later.notify = xen_wakeup_later_notifier;
> + qemu_register_wakeup_later_notifier(&state->wakeup_later);
> +
> xc_get_hvm_param(xen_xc, xen_domid, HVM_PARAM_IOREQ_PFN, &ioreq_pfn);
> DPRINTF("shared page at pfn %lx\n", ioreq_pfn);
> state->shared_page = xc_map_foreign_range(xen_xc, xen_domid, XC_PAGE_SIZE,
>
Could you break this path into two? One which add the notifier list and
a second one with the Xen specific part?
Thanks,
--
Anthony PERARD
next prev parent reply other threads:[~2013-08-30 15:01 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-29 8:25 [Qemu-devel] [PATCH V2] qemu-xen: HVM domain S3 bugfix Liu, Jinsong
2013-08-30 15:00 ` Anthony PERARD [this message]
2013-09-01 9:51 ` [Qemu-devel] [PATCH 1/2] qem-xen: add later wakeup logic when qemu wakeup Liu, Jinsong
2013-09-03 10:55 ` Anthony PERARD
2013-09-03 11:04 ` Liu, Jinsong
2013-09-03 11:04 ` [Qemu-devel] " Liu, Jinsong
2013-09-05 17:27 ` Stefano Stabellini
2013-09-05 17:27 ` [Qemu-devel] " Stefano Stabellini
2013-09-06 9:03 ` Liu, Jinsong
2013-09-06 9:03 ` Liu, Jinsong
2013-09-03 10:55 ` Anthony PERARD
2013-09-01 9:51 ` Liu, Jinsong
2013-09-01 9:54 ` [PATCH 2/2] qemu-xen: add qemu xen logic for HVM S3 resume Liu, Jinsong
2013-09-01 9:54 ` [Qemu-devel] " Liu, Jinsong
2013-09-03 10:56 ` Anthony PERARD
2013-09-03 10:56 ` [Qemu-devel] " Anthony PERARD
2013-09-01 9:58 ` [PATCH V2] qemu-xen: HVM domain S3 bugfix Liu, Jinsong
2013-09-01 9:58 ` [Qemu-devel] " Liu, Jinsong
2013-08-30 15:00 ` Anthony PERARD
2013-09-05 19:57 ` [Qemu-devel] " Paolo Bonzini
2013-09-09 3:24 ` Liu, Jinsong
2013-09-09 3:24 ` Liu, Jinsong
2013-09-05 19:57 ` Paolo Bonzini
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=5220B3A3.4000100@citrix.com \
--to=anthony.perard@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=jinsong.liu@intel.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.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.