[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 2/2] target/ppc: Fix setting of cpu->compat_pvr o
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PULL 2/2] target/ppc: Fix setting of cpu->compat_pvr on incoming migration |
Date: |
Mon, 27 Nov 2017 15:35:17 +0100 |
On Mon, 27 Nov 2017 15:30:03 +1100
David Gibson <address@hidden> wrote:
> From: Suraj Jitindar Singh <address@hidden>
>
> cpu->compat_pvr is used to store the current compat mode of the cpu.
>
> On the receiving side during incoming migration we check compatibility
> with the compat mode by calling ppc_set_compat(). However we fail to set
> the compat mode with the hypervisor since the "new" compat mode doesn't
> differ from the current (due to a "cpu->compat_pvr != compat_pvr" check).
> This means that kvm runs the vcpus without a compat mode, which is the
> incorrect behaviour. The implication being that a compatibility mode
> will never be in effect after migration.
>
> To fix this so that the compat mode is correctly set with the
> hypervisor, store the desired compat mode and reset cpu->compat_pvr to
> zero before calling ppc_set_compat().
>
> Fixes: 5dfaa532 ("ppc: fix ppc_set_compat() with KVM PR")
>
Cc'ing stable since 5dfaa532 was shipped with QEMU 2.10
> Signed-off-by: Suraj Jitindar Singh <address@hidden>
> Signed-off-by: David Gibson <address@hidden>
> ---
> target/ppc/machine.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/target/ppc/machine.c b/target/ppc/machine.c
> index 384caee800..24117e8f31 100644
> --- a/target/ppc/machine.c
> +++ b/target/ppc/machine.c
> @@ -237,9 +237,11 @@ static int cpu_post_load(void *opaque, int version_id)
>
> #if defined(TARGET_PPC64)
> if (cpu->compat_pvr) {
> + uint32_t compat_pvr = cpu->compat_pvr;
> Error *local_err = NULL;
>
> - ppc_set_compat(cpu, cpu->compat_pvr, &local_err);
> + cpu->compat_pvr = 0;
> + ppc_set_compat(cpu, compat_pvr, &local_err);
> if (local_err) {
> error_report_err(local_err);
> return -1;