On 30/10/16 22:12, David Gibson wrote: > 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> > --- > 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 b983faa..2aa0900 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1169,6 +1169,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 0319516..4b6134b 100644 > --- a/hw/ppc/spapr_cpu_core.c > +++ b/hw/ppc/spapr_cpu_core.c > @@ -103,16 +103,6 @@ static void spapr_cpu_init(sPAPRMachineState *spapr, > PowerPCCPU *cpu, > cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); > cpu_ppc_set_papr(cpu); > > - 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; > - } > - } > - > /* Set NUMA node for the added CPUs */ > i = numa_get_node_for_cpu(cs->cpu_index); > if (i < nb_numa_nodes) { > -- Alexey