qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: Daniel Henrique Barboza <danielhb413@gmail.com>
Cc: "Nicholas Piggin" <npiggin@gmail.com>,
	"Cédric Le Goater" <clg@kaod.org>,
	"David Gibson" <david@gibson.dropbear.id.au>,
	"Greg Kurz" <groug@kaod.org>,
	"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
	qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: [PATCH 6/6] target/ppc: Migrate DECR SPR
Date: Thu, 27 Jul 2023 04:22:30 +1000	[thread overview]
Message-ID: <20230726182230.433945-7-npiggin@gmail.com> (raw)
In-Reply-To: <20230726182230.433945-1-npiggin@gmail.com>

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 134b16c625..ebb37e07d0 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;
 }
 
@@ -314,6 +322,12 @@ static int cpu_post_load(void *opaque, int version_id)
     post_load_update_msr(env);
 
     if (tcg_enabled()) {
+        /*
+         * 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



  parent reply	other threads:[~2023-07-26 19:25 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-26 18:22 [PATCH 0/6] ppc fixes possibly for 8.1 Nicholas Piggin
2023-07-26 18:22 ` [PATCH 1/6] target/ppc: Implement ASDR register for ISA v3.0 for HPT Nicholas Piggin
2023-07-27 13:22   ` Cédric Le Goater
2023-07-26 18:22 ` [PATCH 2/6] target/ppc: Fix VRMA page size for ISA v3.0 Nicholas Piggin
2023-07-27 13:07   ` Cédric Le Goater
2023-07-26 18:22 ` [PATCH 3/6] target/ppc: Fix pending HDEC when entering PM state Nicholas Piggin
2023-07-27 12:57   ` Cédric Le Goater
2023-07-26 18:22 ` [PATCH 4/6] hw/ppc: Avoid decrementer rounding errors Nicholas Piggin
2023-07-26 18:22 ` [PATCH 5/6] hw/ppc: Always store the decrementer value Nicholas Piggin
2023-07-27 12:26   ` Cédric Le Goater
2023-07-30  9:40     ` Nicholas Piggin
2023-07-30 16:18       ` Cédric Le Goater
2023-07-26 18:22 ` Nicholas Piggin [this message]
2023-07-28 20:05 ` [PATCH 0/6] ppc fixes possibly for 8.1 Daniel Henrique Barboza

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230726182230.433945-7-npiggin@gmail.com \
    --to=npiggin@gmail.com \
    --cc=clg@kaod.org \
    --cc=danielhb413@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=groug@kaod.org \
    --cc=harshpb@linux.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).