[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 10/19] target/ppc: Migrate DECR SPR
From: |
Nicholas Piggin |
Subject: |
[PATCH v2 10/19] target/ppc: Migrate DECR SPR |
Date: |
Tue, 8 Aug 2023 14:19:52 +1000 |
TCG does not maintain the DEC reigster in the SPR array, so it does get
migrated. TCG also needs to re-start the decrementer timer on the
destination machine.
Load and store the decrementer into the SPR when migrating. This works
for the level-triggered (book3s) decrementer, and should be compatible
with existing KVM machines that do keep the DEC value there.
This fixes lost decrementer interrupt on migration that can cause
hangs, as well as other problems including record-replay bugs.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
target/ppc/machine.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/target/ppc/machine.c b/target/ppc/machine.c
index 8234e35d69..8a190c4853 100644
--- a/target/ppc/machine.c
+++ b/target/ppc/machine.c
@@ -209,6 +209,14 @@ static int cpu_pre_save(void *opaque)
/* Used to retain migration compatibility for pre 6.0 for 601 machines. */
env->hflags_compat_nmsr = 0;
+ if (tcg_enabled()) {
+ /*
+ * TCG does not maintain the DECR spr (unlike KVM) so have to save
+ * it here.
+ */
+ env->spr[SPR_DECR] = cpu_ppc_load_decr(env);
+ }
+
return 0;
}
@@ -319,6 +327,12 @@ static int cpu_post_load(void *opaque, int version_id)
ppc_update_ciabr(env);
ppc_update_daw0(env);
#endif
+ /*
+ * TCG needs to re-start the decrementer timer and/or raise the
+ * interrupt. This works for level-triggered decrementer. Edge
+ * triggered types (including HDEC) would need to carry more state.
+ */
+ cpu_ppc_store_decr(env, env->spr[SPR_DECR]);
pmu_mmcr01_updated(env);
}
--
2.40.1
- [PATCH v2 01/19] ppc/vhyp: reset exception state when handling vhyp hcall, (continued)
- [PATCH v2 01/19] ppc/vhyp: reset exception state when handling vhyp hcall, Nicholas Piggin, 2023/08/08
- [PATCH v2 02/19] ppc/vof: Fix missed fields in VOF cleanup, Nicholas Piggin, 2023/08/08
- [PATCH v2 03/19] hw/ppc/ppc.c: Tidy over-long lines, Nicholas Piggin, 2023/08/08
- [PATCH v2 04/19] hw/ppc: Introduce functions for conversion between timebase and nanoseconds, Nicholas Piggin, 2023/08/08
- [PATCH v2 05/19] host-utils: Add muldiv64_round_up, Nicholas Piggin, 2023/08/08
- [PATCH v2 06/19] hw/ppc: Round up the decrementer interval when converting to ns, Nicholas Piggin, 2023/08/08
- [PATCH v2 07/19] hw/ppc: Avoid decrementer rounding errors, Nicholas Piggin, 2023/08/08
- [PATCH v2 08/19] target/ppc: Sign-extend large decrementer to 64-bits, Nicholas Piggin, 2023/08/08
- [PATCH v2 09/19] hw/ppc: Always store the decrementer value, Nicholas Piggin, 2023/08/08
- [PATCH v2 10/19] target/ppc: Migrate DECR SPR,
Nicholas Piggin <=
- [PATCH v2 11/19] hw/ppc: Reset timebase facilities on machine reset, Nicholas Piggin, 2023/08/08
- [PATCH v2 12/19] hw/ppc: Read time only once to perform decrementer write, Nicholas Piggin, 2023/08/08
- [PATCH v2 13/19] target/ppc: Fix CPU reservation migration for record-replay, Nicholas Piggin, 2023/08/08
- [PATCH v2 14/19] target/ppc: Fix timebase reset with record-replay, Nicholas Piggin, 2023/08/08
- [PATCH v2 15/19] spapr: Fix machine reset deadlock from replay-record, Nicholas Piggin, 2023/08/08
- [PATCH v2 16/19] spapr: Fix record-replay machine reset consuming too many events, Nicholas Piggin, 2023/08/08
- [PATCH v2 17/19] tests/avocado: boot ppc64 pseries replay-record test to Linux VFS mount, Nicholas Piggin, 2023/08/08
- [PATCH v2 18/19] tests/avocado: reverse-debugging cope with re-executing breakpoints, Nicholas Piggin, 2023/08/08