From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58639) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvSiM-0002AF-QM for qemu-devel@nongnu.org; Thu, 09 Feb 2012 07:03:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvSiC-0001GZ-S6 for qemu-devel@nongnu.org; Thu, 09 Feb 2012 07:03:02 -0500 Received: from mx1.redhat.com ([209.132.183.28]:6854) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvSiC-0001GL-KE for qemu-devel@nongnu.org; Thu, 09 Feb 2012 07:02:52 -0500 Message-ID: <4F33B5E7.7070502@redhat.com> Date: Thu, 09 Feb 2012 13:02:47 +0100 From: Gerd Hoffmann MIME-Version: 1.0 References: <1328698819-31269-1-git-send-email-kraxel@redhat.com> <1328698819-31269-2-git-send-email-kraxel@redhat.com> <20120209084816.GB18866@redhat.com> <4F33A3C1.1080108@redhat.com> <20120209111928.GH18866@redhat.com> In-Reply-To: <20120209111928.GH18866@redhat.com> Content-Type: multipart/mixed; boundary="------------000205040100020909080901" Subject: Re: [Qemu-devel] [PATCH v3 1/6] suspend: add infrastructure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gleb Natapov Cc: xen-devel@lists.xensource.com, qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------000205040100020909080901 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 02/09/12 12:19, Gleb Natapov wrote: > On Thu, Feb 09, 2012 at 11:45:21AM +0100, Gerd Hoffmann wrote: >> On 02/09/12 09:48, Gleb Natapov wrote: >>> On Wed, Feb 08, 2012 at 12:00:14PM +0100, Gerd Hoffmann wrote: >>>> * qemu_system_wakeup_request is supposed to be called on events which >>>> should wake up the guest. >>>> >>> qemu_system_wakeup_request() should get wakeup source as a parameter. >>> There are ways to report it to a guest. >> >> Can we do that incrementally, when we actually implement the guest >> reporting? >> > What do you mean by "when we actually implement the guest > reporting"? The guest reporting is part of ACPI spec and implemented > by all relevant guests. I think that adding wakeup source parameter to > qemu_system_wakeup_request() and reporting RTC_STS and PWRBTN_STS should > not complicate your patch series to much. I agree that DSDT magic required > by other devices can wait for later. Incremental patch (just infrastructure, no acpi windup yet) attached. Something like this? cheers, Gerd --------------000205040100020909080901 Content-Type: text/plain; name="wakeup-reason.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="wakeup-reason.diff" commit 78fbd17ddc98a2e96e05db62afbe3a69c5fad5e5 Author: Gerd Hoffmann Date: Thu Feb 9 12:52:48 2012 +0100 reason: infra diff --git a/sysemu.h b/sysemu.h index 3b9d7f5..e7060aa 100644 --- a/sysemu.h +++ b/sysemu.h @@ -38,10 +38,16 @@ void vm_start(void); void vm_stop(RunState state); void vm_stop_force_state(RunState state); +typedef enum WakeupReason { + QEMU_WAKEUP_REASON_OTHER = 0, + QEMU_WAKEUP_REASON_RTC, +} WakeupReason; + void qemu_system_reset_request(void); void qemu_system_suspend_request(void); void qemu_register_suspend_notifier(Notifier *notifier); -void qemu_system_wakeup_request(void); +void qemu_system_wakeup_request(WakeupReason reason); +void qemu_register_wakeup_notifier(Notifier *notifier); void qemu_system_shutdown_request(void); void qemu_system_powerdown_request(void); void qemu_system_debug_request(void); diff --git a/vl.c b/vl.c index 822fd58..17d4b72 100644 --- a/vl.c +++ b/vl.c @@ -1286,6 +1286,8 @@ static int debug_requested; static bool is_suspended; static NotifierList suspend_notifiers = NOTIFIER_LIST_INITIALIZER(suspend_notifiers); +static NotifierList wakeup_notifiers = + NOTIFIER_LIST_INITIALIZER(wakeup_notifiers); static RunState vmstop_requested = RUN_STATE_MAX; int qemu_shutdown_requested_get(void) @@ -1416,16 +1418,22 @@ void qemu_register_suspend_notifier(Notifier *notifier) notifier_list_add(&suspend_notifiers, notifier); } -void qemu_system_wakeup_request(void) +void qemu_system_wakeup_request(WakeupReason reason) { if (!is_suspended) { return; } + notifier_list_notify(&wakeup_notifiers, &reason); reset_requested = 1; qemu_notify_event(); is_suspended = false; } +void qemu_register_wakeup_notifier(Notifier *notifier) +{ + notifier_list_add(&wakeup_notifiers, notifier); +} + void qemu_system_killed(int signal, pid_t pid) { shutdown_signal = signal; --------------000205040100020909080901--