[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3 1/2] qemu: Adjust qemu wakeup
On 09/09/13 04:26, Liu, Jinsong wrote: > From 6f40a66521e012170493964a2135fb3b4ae7c9b2 Mon Sep 17 00:00:00 2001 > From: Liu Jinsong <jinsong.liu@xxxxxxxxx> > Date: Sun, 8 Sep 2013 00:33:19 +0800 > Subject: [PATCH V3 1/2] qemu: Adjust qemu wakeup > > Currently Xen 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 two qemu patches and one xl patch to fix Xen hvm s3 bug. > This patch is the qemu patch 1. It adjusts qemu wakeup so that > Xen s3 resume logic (which will be implemented at qemu patch 2) > will be notified after qemu system reset. > > Signed-off-by: Liu Jinsong <jinsong.liu@xxxxxxxxx> > --- > hw/acpi/core.c | 3 ++- > include/sysemu/sysemu.h | 4 +++- > vl.c | 15 +++++++-------- > 3 files changed, 12 insertions(+), 10 deletions(-) > > diff --git a/hw/acpi/core.c b/hw/acpi/core.c > index 7467b88..7138139 100644 > --- a/hw/acpi/core.c > +++ b/hw/acpi/core.c > @@ -324,12 +324,13 @@ static void acpi_notify_wakeup(Notifier *notifier, void > *data) > (ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_TIMER_STATUS); > break; > case QEMU_WAKEUP_REASON_OTHER: > - default: > /* ACPI_BITMASK_WAKE_STATUS should be set on resume. > Pretend that resume was caused by power button */ > ar->pm1.evt.sts |= > (ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_POWER_BUTTON_STATUS); > break; > + default: > + break; > } > } > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h > index b1aa059..50bc44d 100644 > --- a/include/sysemu/sysemu.h > +++ b/include/sysemu/sysemu.h > @@ -39,9 +39,11 @@ int vm_stop(RunState state); > int vm_stop_force_state(RunState state); > > typedef enum WakeupReason { > - QEMU_WAKEUP_REASON_OTHER = 0, > + /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */ > + QEMU_WAKEUP_REASON_NONE = 0, > QEMU_WAKEUP_REASON_RTC, > QEMU_WAKEUP_REASON_PMTIMER, > + QEMU_WAKEUP_REASON_OTHER, > } WakeupReason; > > void qemu_system_reset_request(void); > diff --git a/vl.c b/vl.c > index b4b119a..8c5f113 100644 > --- a/vl.c > +++ b/vl.c > @@ -1792,14 +1792,14 @@ static pid_t shutdown_pid; > static int powerdown_requested; > static int debug_requested; > static int suspend_requested; > -static int wakeup_requested; > +static WakeupReason wakeup_reason; > static NotifierList powerdown_notifiers = > NOTIFIER_LIST_INITIALIZER(powerdown_notifiers); > static NotifierList suspend_notifiers = > NOTIFIER_LIST_INITIALIZER(suspend_notifiers); > static NotifierList wakeup_notifiers = > NOTIFIER_LIST_INITIALIZER(wakeup_notifiers); > -static uint32_t wakeup_reason_mask = ~0; > +static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE); > static RunState vmstop_requested = RUN_STATE_MAX; > > int qemu_shutdown_requested_get(void) > @@ -1849,11 +1849,9 @@ static int qemu_suspend_requested(void) > return r; > } > > -static int qemu_wakeup_requested(void) > +static WakeupReason qemu_wakeup_requested(void) > { > - int r = wakeup_requested; > - wakeup_requested = 0; > - return r; > + return wakeup_reason; > } > > static int qemu_powerdown_requested(void) > @@ -1970,8 +1968,7 @@ void qemu_system_wakeup_request(WakeupReason reason) > return; > } > runstate_set(RUN_STATE_RUNNING); > - notifier_list_notify(&wakeup_notifiers, &reason); > - wakeup_requested = 1; > + wakeup_reason = reason; > qemu_notify_event(); > } > > @@ -2063,6 +2060,8 @@ static bool main_loop_should_exit(void) > pause_all_vcpus(); > cpu_synchronize_all_states(); > qemu_system_reset(VMRESET_SILENT); > + notifier_list_notify(&wakeup_notifiers, &wakeup_reason); > + wakeup_reason = QEMU_WAKEUP_REASON_NONE; > resume_all_vcpus(); > monitor_protocol_event(QEVENT_WAKEUP, NULL); > } > Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |