[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 1/5] icount: don't adjust virtual time backwards after warp
From: |
Paolo Bonzini |
Subject: |
[PULL 1/5] icount: don't adjust virtual time backwards after warp |
Date: |
Thu, 29 Jun 2023 12:19:14 +0200 |
From: Nicholas Piggin <npiggin@gmail.com>
The icount-based QEMU_CLOCK_VIRTUAL runs ahead of the RT clock at times.
When warping, it is possible it is still ahead at the end of the warp,
which causes icount adaptive mode to adjust it backward. This can result
in the machine observing time going backwards.
Prevent this by clamping adaptive adjustment to 0 at minimum.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Message-ID: <20230627061406.241847-1-npiggin@gmail.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
softmmu/icount.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/softmmu/icount.c b/softmmu/icount.c
index 4504433e168..a5cef9c60a7 100644
--- a/softmmu/icount.c
+++ b/softmmu/icount.c
@@ -259,11 +259,16 @@ static void icount_warp_rt(void)
warp_delta = clock - timers_state.vm_clock_warp_start;
if (icount_enabled() == 2) {
/*
- * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
- * far ahead of real time.
+ * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too far
+ * ahead of real time (it might already be ahead so careful not
+ * to go backwards).
*/
int64_t cur_icount = icount_get_locked();
int64_t delta = clock - cur_icount;
+
+ if (delta < 0) {
+ delta = 0;
+ }
warp_delta = MIN(warp_delta, delta);
}
qatomic_set_i64(&timers_state.qemu_icount_bias,
--
2.41.0
- [PULL 0/5] x86, main loop changes for 2023-06-29, Paolo Bonzini, 2023/06/29
- [PULL 1/5] icount: don't adjust virtual time backwards after warp,
Paolo Bonzini <=
- [PULL 2/5] target/i386: Export MSR_ARCH_CAPABILITIES bits to guests, Paolo Bonzini, 2023/06/29
- [PULL 3/5] target/i386: ignore ARCH_CAPABILITIES features in user mode emulation, Paolo Bonzini, 2023/06/29
- [PULL 4/5] target/i386: ignore CPL0-specific features in user mode emulation, Paolo Bonzini, 2023/06/29
- [PULL 5/5] target/i386: emulate 64-bit ring 0 for linux-user if LM feature is set, Paolo Bonzini, 2023/06/29
- Re: [PULL 0/5] x86, main loop changes for 2023-06-29, Richard Henderson, 2023/06/29