[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/29] replay: notify vCPU when BH is scheduled
From: |
Paolo Bonzini |
Subject: |
[PULL 07/29] replay: notify vCPU when BH is scheduled |
Date: |
Mon, 6 Jun 2022 16:36:22 +0200 |
From: Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru>
vCPU execution should be suspended when new BH is scheduled.
This is needed to avoid guest timeouts caused by the long cycles
of the execution. In replay mode execution may hang when
vCPU sleeps and block event comes to the queue.
This patch adds notification which wakes up vCPU or interrupts
execution of guest code.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
--
v2: changed first_cpu to current_cpu (suggested by Richard Henderson)
v4: moved vCPU notification to aio_bh_enqueue (suggested by Paolo Bonzini)
Message-Id: <165364837317.688121.17680519919871405281.stgit@pasha-ThinkPad-X280>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/sysemu/cpu-timers.h | 1 +
softmmu/icount.c | 8 ++++++++
stubs/icount.c | 4 ++++
util/async.c | 8 ++++++++
4 files changed, 21 insertions(+)
diff --git a/include/sysemu/cpu-timers.h b/include/sysemu/cpu-timers.h
index ed6ee5c46c..2e786fe7fb 100644
--- a/include/sysemu/cpu-timers.h
+++ b/include/sysemu/cpu-timers.h
@@ -59,6 +59,7 @@ int64_t icount_round(int64_t count);
/* if the CPUs are idle, start accounting real time to virtual clock. */
void icount_start_warp_timer(void);
void icount_account_warp_timer(void);
+void icount_notify_exit(void);
/*
* CPU Ticks and Clock
diff --git a/softmmu/icount.c b/softmmu/icount.c
index 5ca271620d..1cafec5014 100644
--- a/softmmu/icount.c
+++ b/softmmu/icount.c
@@ -486,3 +486,11 @@ void icount_configure(QemuOpts *opts, Error **errp)
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
NANOSECONDS_PER_SECOND / 10);
}
+
+void icount_notify_exit(void)
+{
+ if (icount_enabled() && current_cpu) {
+ qemu_cpu_kick(current_cpu);
+ qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
+ }
+}
diff --git a/stubs/icount.c b/stubs/icount.c
index f13c43568b..6df8c2bf7d 100644
--- a/stubs/icount.c
+++ b/stubs/icount.c
@@ -43,3 +43,7 @@ void icount_account_warp_timer(void)
{
abort();
}
+
+void icount_notify_exit(void)
+{
+}
diff --git a/util/async.c b/util/async.c
index 554ba70cca..63434ddae4 100644
--- a/util/async.c
+++ b/util/async.c
@@ -33,6 +33,7 @@
#include "block/raw-aio.h"
#include "qemu/coroutine_int.h"
#include "qemu/coroutine-tls.h"
+#include "sysemu/cpu-timers.h"
#include "trace.h"
/***********************************************************/
@@ -84,6 +85,13 @@ static void aio_bh_enqueue(QEMUBH *bh, unsigned new_flags)
}
aio_notify(ctx);
+ /*
+ * Workaround for record/replay.
+ * vCPU execution should be suspended when new BH is set.
+ * This is needed to avoid guest timeouts caused
+ * by the long cycles of the execution.
+ */
+ icount_notify_exit();
}
/* Only called from aio_bh_poll() and aio_ctx_finalize() */
--
2.36.1
- [PULL 00/29] Misc patches for 2022-06-06, Paolo Bonzini, 2022/06/06
- [PULL 02/29] build: add a "make modules" target, Paolo Bonzini, 2022/06/06
- [PULL 07/29] replay: notify vCPU when BH is scheduled,
Paolo Bonzini <=
- [PULL 06/29] replay: fix event queue flush for qemu shutdown, Paolo Bonzini, 2022/06/06
- [PULL 10/29] docs: convert docs/devel/replay page to rst, Paolo Bonzini, 2022/06/06
- [PULL 13/29] tests/avocado: add replay Linux tests for virtio machine, Paolo Bonzini, 2022/06/06
- [PULL 14/29] tests/avocado: add replay Linux test for Aarch64 machines, Paolo Bonzini, 2022/06/06
- [PULL 03/29] target/i386: Fix wrong count setting, Paolo Bonzini, 2022/06/06
- [PULL 05/29] modules: generates per-target modinfo, Paolo Bonzini, 2022/06/06
- [PULL 04/29] modules: introduces module_kconfig directive, Paolo Bonzini, 2022/06/06
- [PULL 09/29] replay: simplify async event processing, Paolo Bonzini, 2022/06/06
- [PULL 17/29] x86: cpu: fixup number of addressable IDs for logical processors sharing cache, Paolo Bonzini, 2022/06/06
- [PULL 18/29] python: update for mypy 0.950, Paolo Bonzini, 2022/06/06