[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v2 09/26] replay: save prior value of the ho
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC PATCH v2 09/26] replay: save prior value of the host clock |
Date: |
Tue, 14 Nov 2017 14:35:16 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 14/11/2017 09:17, Pavel Dovgalyuk wrote:
> 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>
>
> ---
> 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 1b518bc..a610a17 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)
> {
>
Acked-by: Paolo Bonzini <address@hidden>
- [Qemu-devel] [RFC PATCH v2 03/26] replay: disable default snapshot for record/replay, (continued)
- [Qemu-devel] [RFC PATCH v2 03/26] replay: disable default snapshot for record/replay, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 04/26] replay: fix processing async events, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 05/26] replay: fixed replay_enable_events, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 06/26] replay: fix save/load vm for non-empty queue, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 07/26] replay: added replay log format description, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 08/26] replay: make safe vmstop at record/replay, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 09/26] replay: save prior value of the host clock, Pavel Dovgalyuk, 2017/11/14
- Re: [Qemu-devel] [RFC PATCH v2 09/26] replay: save prior value of the host clock,
Paolo Bonzini <=
- [Qemu-devel] [RFC PATCH v2 10/26] icount: fixed saving/restoring of icount warp timers, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 11/26] target/arm/arm-powertctl: drop BQL assertions, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 12/26] cpus: push BQL lock to qemu_*_wait_io_event, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 13/26] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 14/26] replay/replay.c: bump REPLAY_VERSION again, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 15/26] replay/replay-internal.c: track holding of replay_lock, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 16/26] replay: make locking visible outside replay code, Pavel Dovgalyuk, 2017/11/14
- [Qemu-devel] [RFC PATCH v2 17/26] replay: push replay_mutex_lock up the call tree, Pavel Dovgalyuk, 2017/11/14