[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v8 13/21] replay: shutdown event
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH v8 13/21] replay: shutdown event |
Date: |
Thu, 22 Jan 2015 11:52:43 +0300 |
User-agent: |
StGit/0.16 |
This patch records and replays simulator shutdown event.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
replay/replay-internal.h | 2 ++
replay/replay.c | 12 ++++++++++++
replay/replay.h | 5 +++++
vl.c | 1 +
4 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index be71e6f..68b2d45 100755
--- a/replay/replay-internal.h
+++ b/replay/replay-internal.h
@@ -27,6 +27,8 @@ enum ReplayEvents {
EVENT_TIME_T,
/* for tm event */
EVENT_TM,
+ /* for shutdown request */
+ EVENT_SHUTDOWN,
/* for clock read/writes */
/* some of grteater codes are reserved for clocks */
EVENT_CLOCK
diff --git a/replay/replay.c b/replay/replay.c
index 307ac4b..cfa69fa 100755
--- a/replay/replay.c
+++ b/replay/replay.c
@@ -13,6 +13,7 @@
#include "replay.h"
#include "replay-internal.h"
#include "qemu/timer.h"
+#include "sysemu/sysemu.h"
ReplayMode replay_mode = REPLAY_MODE_NONE;
@@ -34,6 +35,10 @@ bool skip_async_events(int stop_event)
res = true;
}
switch (replay_data_kind) {
+ case EVENT_SHUTDOWN:
+ replay_has_unread_data = 0;
+ qemu_system_shutdown_request();
+ break;
case EVENT_INSTRUCTION:
replay_state.instructions_count = replay_get_dword();
return res;
@@ -151,3 +156,10 @@ bool replay_has_interrupt(void)
}
return res;
}
+
+void replay_shutdown_request(void)
+{
+ if (replay_mode == REPLAY_MODE_RECORD) {
+ replay_put_event(EVENT_SHUTDOWN);
+ }
+}
diff --git a/replay/replay.h b/replay/replay.h
index 2f1402c..e1c5fcf 100755
--- a/replay/replay.h
+++ b/replay/replay.h
@@ -76,6 +76,11 @@ time_t replay_time(void);
In replay mode it just read from the log. */
void replay_get_timedate(struct tm *tm);
+/* 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 baff3b5..905ea8a 100644
--- a/vl.c
+++ b/vl.c
@@ -1720,6 +1720,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] [RFC PATCH v8 08/21] cpu: replay instructions sequence, (continued)
- [Qemu-devel] [RFC PATCH v8 08/21] cpu: replay instructions sequence, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 09/21] replay: interrupts and exceptions, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 10/21] replay: asynchronous events infrastructure, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 11/21] replay: recording and replaying clock ticks, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 12/21] replay: recording and replaying different timers, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 13/21] replay: shutdown event,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH v8 15/21] aio: replace stack of bottom halves with queue, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 14/21] replay: checkpoints, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 16/21] replay: bottom halves, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 17/21] replay: replay aio requests, Pavel Dovgalyuk, 2015/01/22
- [Qemu-devel] [RFC PATCH v8 18/21] replay: thread pool, Pavel Dovgalyuk, 2015/01/22