[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 09/22] replay: save prior value of the host clock
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [PATCH v7 09/22] replay: save prior value of the host clock |
Date: |
Tue, 27 Feb 2018 12:52:26 +0300 |
User-agent: |
StGit/0.17.1-dirty |
This patch adds saving/restoring of the host clock field 'last'.
It is used in host clock calculation and therefore clock may
become incorrect when using restored vmstate.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
Acked-by: Paolo Bonzini <address@hidden>
---
include/qemu/timer.h | 14 ++++++++++++++
replay/replay-internal.h | 2 ++
replay/replay-snapshot.c | 3 +++
util/qemu-timer.c | 12 ++++++++++++
4 files changed, 31 insertions(+)
diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 3b5a54b..39ea907 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -251,6 +251,20 @@ bool qemu_clock_run_timers(QEMUClockType type);
*/
bool qemu_clock_run_all_timers(void);
+/**
+ * qemu_clock_get_last:
+ *
+ * Returns last clock query time.
+ */
+uint64_t qemu_clock_get_last(QEMUClockType type);
+/**
+ * qemu_clock_set_last:
+ *
+ * Sets last clock query time.
+ */
+void qemu_clock_set_last(QEMUClockType type, uint64_t last);
+
+
/*
* QEMUTimerList
*/
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index 3ebb199..be96d7e 100644
--- a/replay/replay-internal.h
+++ b/replay/replay-internal.h
@@ -78,6 +78,8 @@ typedef struct ReplayState {
This counter is global, because requests from different
block devices should not get overlapping ids. */
uint64_t block_request_id;
+ /*! Prior value of the host clock */
+ uint64_t host_clock_last;
} ReplayState;
extern ReplayState replay_state;
diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
index 7075986..e0b2204 100644
--- a/replay/replay-snapshot.c
+++ b/replay/replay-snapshot.c
@@ -25,6 +25,7 @@ static int replay_pre_save(void *opaque)
{
ReplayState *state = opaque;
state->file_offset = ftell(replay_file);
+ state->host_clock_last = qemu_clock_get_last(QEMU_CLOCK_HOST);
return 0;
}
@@ -33,6 +34,7 @@ static int replay_post_load(void *opaque, int version_id)
{
ReplayState *state = opaque;
fseek(replay_file, state->file_offset, SEEK_SET);
+ qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
/* If this was a vmstate, saved in recording mode,
we need to initialize replay data fields. */
replay_fetch_data_kind();
@@ -54,6 +56,7 @@ static const VMStateDescription vmstate_replay = {
VMSTATE_UINT32(has_unread_data, ReplayState),
VMSTATE_UINT64(file_offset, ReplayState),
VMSTATE_UINT64(block_request_id, ReplayState),
+ VMSTATE_UINT64(host_clock_last, ReplayState),
VMSTATE_END_OF_LIST()
},
};
diff --git a/util/qemu-timer.c b/util/qemu-timer.c
index 82d5650..2ed1bf2 100644
--- a/util/qemu-timer.c
+++ b/util/qemu-timer.c
@@ -622,6 +622,18 @@ int64_t qemu_clock_get_ns(QEMUClockType type)
}
}
+uint64_t qemu_clock_get_last(QEMUClockType type)
+{
+ QEMUClock *clock = qemu_clock_ptr(type);
+ return clock->last;
+}
+
+void qemu_clock_set_last(QEMUClockType type, uint64_t last)
+{
+ QEMUClock *clock = qemu_clock_ptr(type);
+ clock->last = last;
+}
+
void qemu_clock_register_reset_notifier(QEMUClockType type,
Notifier *notifier)
{
- [Qemu-devel] [ PATCH v7 00/22] replay additions, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 01/22] cpu-exec: fix exception_index handling, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 02/22] block: implement bdrv_snapshot_goto for blkreplay, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 03/22] blkreplay: create temporary overlay for underlaying devices, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 04/22] replay: disable default snapshot for record/replay, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 05/22] replay: fix processing async events, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 06/22] replay: fixed replay_enable_events, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 07/22] replay: fix save/load vm for non-empty queue, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 08/22] replay: added replay log format description, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 09/22] replay: save prior value of the host clock,
Pavel Dovgalyuk <=
- [Qemu-devel] [PATCH v7 11/22] replay/replay-internal.c: track holding of replay_lock, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 10/22] replay/replay.c: bump REPLAY_VERSION again, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 12/22] replay: make locking visible outside replay code, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 13/22] replay: push replay_mutex_lock up the call tree, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 14/22] replay: don't destroy mutex at exit, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 15/22] replay: check return values of fwrite, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 16/22] replay: avoid recursive call of checkpoints, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 17/22] scripts/replay-dump.py: replay log dumper, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 18/22] replay: don't process async events when warping the clock, Pavel Dovgalyuk, 2018/02/27
- [Qemu-devel] [PATCH v7 19/22] replay: save vmstate of the asynchronous events, Pavel Dovgalyuk, 2018/02/27