[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v18 12/21] replay: shutdown event
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [PATCH v18 12/21] replay: shutdown event |
Date: |
Thu, 17 Sep 2015 19:24:33 +0300 |
User-agent: |
StGit/0.16 |
This patch records and replays simulator shutdown event.
Reviewed-by: Paolo Bonzini <address@hidden>
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
replay/replay-internal.h | 2 ++
replay/replay.c | 14 ++++++++++++++
replay/replay.h | 5 +++++
vl.c | 1 +
4 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index f042c46..4414695 100755
--- 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 d072ef7..83b0f8c 100755
--- 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/replay/replay.h b/replay/replay.h
index 2398509..fcc93d1 100755
--- a/replay/replay.h
+++ b/replay/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/vl.c b/vl.c
index 066a080..a563c9e 100644
--- a/vl.c
+++ b/vl.c
@@ -1825,6 +1825,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();
}
- [Qemu-devel] [PATCH v18 04/21] replay: introduce mutex to protect the replay log, (continued)
- [Qemu-devel] [PATCH v18 04/21] replay: introduce mutex to protect the replay log, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 05/21] replay: introduce icount event, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 06/21] cpu-exec: allow temporary disabling icount, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 07/21] cpu: replay instructions sequence, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 08/21] i386: interrupt poll processing, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 09/21] replay: interrupts and exceptions, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 10/21] replay: asynchronous events infrastructure, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 11/21] replay: recording and replaying clock ticks, Pavel Dovgalyuk, 2015/09/17
- [Qemu-devel] [PATCH v18 12/21] replay: shutdown event,
Pavel Dovgalyuk <=
- [Qemu-devel] [PATCH v18 13/21] icount: improve counting for record/replay, Pavel Dovgalyuk, 2015/09/17
[Qemu-devel] [PATCH v18 14/21] replay: checkpoints, Pavel Dovgalyuk, 2015/09/17
[Qemu-devel] [PATCH v18 15/21] bottom halves: introduce bh call function, Pavel Dovgalyuk, 2015/09/17
[Qemu-devel] [PATCH v18 16/21] replay: ptimer, Pavel Dovgalyuk, 2015/09/17
[Qemu-devel] [PATCH v18 17/21] typedef: add typedef for QemuOpts, Pavel Dovgalyuk, 2015/09/17
[Qemu-devel] [PATCH v18 18/21] replay: initialization and deinitialization, Pavel Dovgalyuk, 2015/09/17