[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 36/49] pl031: vmstate in replay mode
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH v2 36/49] pl031: vmstate in replay mode |
Date: |
Thu, 17 Jul 2014 15:05:21 +0400 |
User-agent: |
StGit/0.16 |
This patch modifies vmstate for PL031 RTC. It removes querying of the rtc
and virtual clocks while saving and restoring VM state, because in replay
mode these clocks are stopped while saving. And reading the clock while
restoring the VM state may lead to read of the incorrect values, because
clocks cache in replay module could not be loaded yet.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
hw/timer/pl031.c | 22 +++++++++++++++-------
1 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/hw/timer/pl031.c b/hw/timer/pl031.c
index 02c814f..017b1ce 100644
--- a/hw/timer/pl031.c
+++ b/hw/timer/pl031.c
@@ -220,19 +220,27 @@ static void pl031_pre_save(void *opaque)
{
PL031State *s = opaque;
- /* tick_offset is base_time - rtc_clock base time. Instead, we want to
- * store the base time relative to the QEMU_CLOCK_VIRTUAL for
backwards-compatibility. */
- int64_t delta = qemu_clock_get_ns(rtc_clock) -
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
- s->tick_offset_vmstate = s->tick_offset + delta / get_ticks_per_sec();
+ if (replay_mode == REPLAY_NONE) {
+ /* tick_offset is base_time - rtc_clock base time. Instead, we want to
+ * store the base time relative to the QEMU_CLOCK_VIRTUAL for
backwards-compatibility. */
+ int64_t delta = qemu_clock_get_ns(rtc_clock) -
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+ s->tick_offset_vmstate = s->tick_offset + delta / get_ticks_per_sec();
+ } else {
+ s->tick_offset_vmstate = s->tick_offset;
+ }
}
static int pl031_post_load(void *opaque, int version_id)
{
PL031State *s = opaque;
- int64_t delta = qemu_clock_get_ns(rtc_clock) -
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
- s->tick_offset = s->tick_offset_vmstate - delta / get_ticks_per_sec();
- pl031_set_alarm(s);
+ if (replay_mode == REPLAY_NONE) {
+ int64_t delta = qemu_clock_get_ns(rtc_clock) -
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+ s->tick_offset = s->tick_offset_vmstate - delta / get_ticks_per_sec();
+ pl031_set_alarm(s);
+ } else {
+ s->tick_offset = s->tick_offset_vmstate;
+ }
return 0;
}
- [Qemu-devel] [RFC PATCH v2 47/49] replay: replay_break command, (continued)
- [Qemu-devel] [RFC PATCH v2 47/49] replay: replay_break command, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 49/49] gdbstub: reverse debugging, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 48/49] replay: replay_seek_step command, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 25/49] target-i386: instructions counting code for replay, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 17/49] target-i386: update fp status fix, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 27/49] vga: do not use virtual clock for blinking cursor, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 15/49] softmmu: fixing usage of cpu_st/ld* from helpers, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 32/49] replay: checkpoints, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 26/49] replay: interrupts and exceptions, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 19/49] replay: global variables and function stubs, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 36/49] pl031: vmstate in replay mode,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH v2 35/49] replay: thread pool, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 28/49] replay: asynchronous events infrastructure, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 37/49] replay: initialization and deinitialization, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 11/49] piix: do not raise irq while loading vmstate, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 41/49] tap-win32: destroy the thread at exit, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 14/49] ide pci: reset status field before loading the vmstate, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 30/49] replay: recording and replaying different timers, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 40/49] replay: recording of the user input, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 34/49] replay: replay aio requests, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 21/49] sysemu: system functions for replay, Pavel Dovgalyuk, 2014/07/17