From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36238) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rl0va-00081I-E8 for qemu-devel@nongnu.org; Wed, 11 Jan 2012 11:21:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rl0vV-0003HW-Hp for qemu-devel@nongnu.org; Wed, 11 Jan 2012 11:21:30 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34028) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rl0vV-0003HM-4F for qemu-devel@nongnu.org; Wed, 11 Jan 2012 11:21:25 -0500 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0BF98ie025202 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 11 Jan 2012 10:09:08 -0500 From: Gerd Hoffmann Date: Wed, 11 Jan 2012 16:08:57 +0100 Message-Id: <1326294541-15080-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1326294541-15080-1-git-send-email-kraxel@redhat.com> References: <1326294541-15080-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [RFC PATCH 1/5] suspend: add infrastructure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann This patch adds qemu_system_suspend_request() and void qemu_system_wakeup_request() functions to qemu. qemu_system_suspend_request is supposed to be called when the guest asks for being be suspended, for example via ACPI. qemu_system_wakeup_request is supposed to be called on events which should wake up the guest. Signed-off-by: Gerd Hoffmann --- sysemu.h | 2 ++ vl.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/sysemu.h b/sysemu.h index 3806901..d1834a0 100644 --- a/sysemu.h +++ b/sysemu.h @@ -39,6 +39,8 @@ void vm_stop(RunState state); void vm_stop_force_state(RunState state); void qemu_system_reset_request(void); +void qemu_system_suspend_request(qemu_irq wake_irq); +void qemu_system_wakeup_request(void); 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 ba55b35..26413e3 100644 --- a/vl.c +++ b/vl.c @@ -1282,6 +1282,7 @@ static int shutdown_requested, shutdown_signal = -1; static pid_t shutdown_pid; static int powerdown_requested; static int debug_requested; +static qemu_irq suspend_wake_irq; static RunState vmstop_requested = RUN_STATE_MAX; int qemu_shutdown_requested_get(void) @@ -1397,6 +1398,26 @@ void qemu_system_reset_request(void) qemu_notify_event(); } +void qemu_system_suspend_request(qemu_irq wake_irq) +{ + if (suspend_wake_irq != NULL) { + return; + } + cpu_stop_current(); + qemu_notify_event(); + suspend_wake_irq = wake_irq; +} + +void qemu_system_wakeup_request(void) +{ + if (suspend_wake_irq == NULL) { + return; + } + reset_requested = 1; + qemu_irq_raise(suspend_wake_irq); + suspend_wake_irq = NULL; +} + void qemu_system_killed(int signal, pid_t pid) { shutdown_signal = signal; -- 1.7.1