From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39528) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zu0lM-000326-MW for qemu-devel@nongnu.org; Wed, 04 Nov 2015 11:18:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zu0lL-00026p-5q for qemu-devel@nongnu.org; Wed, 04 Nov 2015 11:18:16 -0500 Received: from mail-wi0-x22f.google.com ([2a00:1450:400c:c05::22f]:38401) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zu0lK-00025n-Nr for qemu-devel@nongnu.org; Wed, 04 Nov 2015 11:18:15 -0500 Received: by wicll6 with SMTP id ll6so35309110wic.1 for ; Wed, 04 Nov 2015 08:18:14 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Wed, 4 Nov 2015 17:17:48 +0100 Message-Id: <1446653876-116008-11-git-send-email-pbonzini@redhat.com> In-Reply-To: <1446653876-116008-1-git-send-email-pbonzini@redhat.com> References: <1446653876-116008-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PULL 10/18] replay: shutdown event List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Pavel Dovgalyuk From: Pavel Dovgalyuk This patch records and replays simulator shutdown event. Reviewed-by: Paolo Bonzini Signed-off-by: Pavel Dovgalyuk Message-Id: <20150917162433.8676.32262.stgit@PASHA-ISP.def.inno> Signed-off-by: Paolo Bonzini --- include/sysemu/replay.h | 5 +++++ replay/replay-internal.h | 2 ++ replay/replay.c | 14 ++++++++++++++ vl.c | 1 + 4 files changed, 22 insertions(+) diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h index 2398509..fcc93d1 100644 --- a/include/sysemu/replay.h +++ b/include/sysemu/replay.h @@ -66,6 +66,11 @@ int64_t replay_read_clock(ReplayClockKind kind); ? replay_save_clock((clock), (value)) \ : (value)) +/* Events */ + +/*! Called when qemu shutdown is requested. */ +void replay_shutdown_request(void); + /* Asynchronous events queue */ /*! Disables storing events in the queue */ diff --git a/replay/replay-internal.h b/replay/replay-internal.h index f042c46..4414695 100644 --- a/replay/replay-internal.h +++ b/replay/replay-internal.h @@ -23,6 +23,8 @@ enum ReplayEvents { EVENT_EXCEPTION, /* for async events */ EVENT_ASYNC, + /* for shutdown request */ + EVENT_SHUTDOWN, /* for clock read/writes */ /* some of greater codes are reserved for clocks */ EVENT_CLOCK, diff --git a/replay/replay.c b/replay/replay.c index b4fc64a..65dca7f 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -14,6 +14,7 @@ #include "replay-internal.h" #include "qemu/timer.h" #include "qemu/main-loop.h" +#include "sysemu/sysemu.h" ReplayMode replay_mode = REPLAY_MODE_NONE; @@ -34,6 +35,10 @@ bool replay_next_event_is(int event) res = true; } switch (replay_data_kind) { + case EVENT_SHUTDOWN: + replay_finish_event(); + qemu_system_shutdown_request(); + break; default: /* clock, time_t, checkpoint and other events */ return res; @@ -146,3 +151,12 @@ bool replay_has_interrupt(void) } return res; } + +void replay_shutdown_request(void) +{ + if (replay_mode == REPLAY_MODE_RECORD) { + replay_mutex_lock(); + replay_put_event(EVENT_SHUTDOWN); + replay_mutex_unlock(); + } +} diff --git a/vl.c b/vl.c index f5f7c3f..1856180 100644 --- a/vl.c +++ b/vl.c @@ -1802,6 +1802,7 @@ void qemu_system_killed(int signal, pid_t pid) void qemu_system_shutdown_request(void) { trace_qemu_system_shutdown_request(); + replay_shutdown_request(); shutdown_requested = 1; qemu_notify_event(); } -- 1.8.3.1