Quoting David Gibson (2017-04-27 02:28:42) > Currently, the CPU compatibility mode is set when the cpu is initialized, > then again when the guest negotiates features. This means if a guest > negotiates a compatibility mode, then reboots, that compatibility mode > will be retained across the reset. > > Usually that will get overridden when features are negotiated on the next > boot, but it's still not really correct. This patch moves the initial set > up of the compatibility mode from cpu init to reset time. The mode *is* > retained if the reboot was caused by the feature negotiation (it might > be important in that case, though it's unlikely). > > Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> > Reviewed-by: Alexey Kardashevskiy <a...@ozlabs.ru>
Reviewed-by: Michael Roth <mdr...@linux.vnet.ibm.com> > --- > hw/ppc/spapr.c | 2 ++ > hw/ppc/spapr_cpu_core.c | 10 ---------- > 2 files changed, 2 insertions(+), 10 deletions(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 547fa27..67f5106 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1332,6 +1332,8 @@ static void ppc_spapr_reset(void) > if (!spapr->cas_reboot) { > spapr_ovec_cleanup(spapr->ov5_cas); > spapr->ov5_cas = spapr_ovec_new(); > + > + ppc_set_compat_all(spapr->max_compat_pvr, &error_abort); > } > > fdt = spapr_build_fdt(spapr, rtas_addr, spapr->rtas_size); > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c > index ba610bc..e810431 100644 > --- a/hw/ppc/spapr_cpu_core.c > +++ b/hw/ppc/spapr_cpu_core.c > @@ -107,16 +107,6 @@ static void spapr_cpu_init(sPAPRMachineState *spapr, > PowerPCCPU *cpu, > /* Enable PAPR mode in TCG or KVM */ > cpu_ppc_set_papr(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); > > - if (spapr->max_compat_pvr) { > - Error *local_err = NULL; > - > - ppc_set_compat(cpu, spapr->max_compat_pvr, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > - return; > - } > - } > - > qemu_register_reset(spapr_cpu_reset, cpu); > spapr_cpu_reset(cpu); > } > -- > 2.9.3 >