[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 10/14] replay: flush rr queue before loading the vmstate
From: |
Pavel Dovgalyuk |
Subject: |
[PATCH v2 10/14] replay: flush rr queue before loading the vmstate |
Date: |
Tue, 11 Aug 2020 14:01:50 +0300 |
User-agent: |
StGit/0.17.1-dirty |
From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
Non-empty record/replay queue prevents saving and loading the VM state,
because it includes pending bottom halves and block coroutines.
But when the new VM state is loaded, we don't have to preserve the consistency
of the current state anymore. Therefore this patch just flushes the queue
allowing the coroutines to finish and removes checking for empty rr queue
for load_snapshot function.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
---
include/sysemu/replay.h | 2 ++
migration/savevm.c | 12 ++++++------
replay/replay-events.c | 4 ++++
replay/replay-internal.h | 2 --
4 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h
index e00ed2f4a5..239c01e7df 100644
--- a/include/sysemu/replay.h
+++ b/include/sysemu/replay.h
@@ -149,6 +149,8 @@ void replay_disable_events(void);
void replay_enable_events(void);
/*! Returns true when saving events is enabled */
bool replay_events_enabled(void);
+/* Flushes events queue */
+void replay_flush_events(void);
/*! Adds bottom half event to the queue */
void replay_bh_schedule_event(QEMUBH *bh);
/* Adds oneshot bottom half event to the queue */
diff --git a/migration/savevm.c b/migration/savevm.c
index d56d9729bd..25df75179a 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2880,12 +2880,6 @@ int load_snapshot(const char *name, Error **errp)
AioContext *aio_context;
MigrationIncomingState *mis = migration_incoming_get_current();
- if (!replay_can_snapshot()) {
- error_setg(errp, "Record/replay does not allow loading snapshot "
- "right now. Try once more later.");
- return -EINVAL;
- }
-
if (!bdrv_all_can_snapshot(&bs)) {
error_setg(errp,
"Device '%s' is writable but does not support snapshots",
@@ -2919,6 +2913,12 @@ int load_snapshot(const char *name, Error **errp)
return -EINVAL;
}
+ /*
+ * Flush the record/replay queue. Now the VM state is going
+ * to change. Therefore we don't need to preserve its consistency
+ */
+ replay_flush_events();
+
/* Flush all IO requests so they don't interfere with the new state. */
bdrv_drain_all_begin();
diff --git a/replay/replay-events.c b/replay/replay-events.c
index 302b84043a..a1c6bb934e 100644
--- a/replay/replay-events.c
+++ b/replay/replay-events.c
@@ -77,6 +77,10 @@ bool replay_has_events(void)
void replay_flush_events(void)
{
+ if (replay_mode == REPLAY_MODE_NONE) {
+ return;
+ }
+
g_assert(replay_mutex_locked());
while (!QTAILQ_EMPTY(&events_list)) {
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index 2f6145ec7c..97649ed8d7 100644
--- a/replay/replay-internal.h
+++ b/replay/replay-internal.h
@@ -149,8 +149,6 @@ void replay_read_next_clock(unsigned int kind);
void replay_init_events(void);
/*! Clears internal data structures for events handling */
void replay_finish_events(void);
-/*! Flushes events queue */
-void replay_flush_events(void);
/*! Returns true if there are any unsaved events in the queue */
bool replay_has_events(void);
/*! Saves events from queue into the file */
- [PATCH v2 00/14] Reverse debugging, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 01/14] replay: don't record interrupt poll, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 02/14] replay: provide an accessor for rr filename, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 03/14] qcow2: introduce icount field for snapshots, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 04/14] migration: introduce icount field for snapshots, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 05/14] iotests: update snapshot test for new output format, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 06/14] qapi: introduce replay.json for record/replay-related stuff, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 07/14] replay: introduce info hmp/qmp command, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 08/14] replay: introduce breakpoint at the specified step, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 09/14] replay: implement replay-seek command, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 10/14] replay: flush rr queue before loading the vmstate,
Pavel Dovgalyuk <=
- [PATCH v2 11/14] gdbstub: add reverse step support in replay mode, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 12/14] gdbstub: add reverse continue support in replay mode, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 13/14] replay: describe reverse debugging in docs/replay.txt, Pavel Dovgalyuk, 2020/08/11
- [PATCH v2 14/14] tests/acceptance: add reverse debugging test, Pavel Dovgalyuk, 2020/08/11