On Wed, May 17, 2017 at 09:19:22AM +0530, Bharata B Rao wrote: > Fix migration of radix guests by ensuring that we issue > KVM_PPC_CONFIGURE_V3_MMU for radix case post migration. > > Reported-by: Nageswara R Sastry <rnsas...@linux.vnet.ibm.com> > Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> > --- > hw/ppc/spapr.c | 15 +++++++++++++++ > hw/ppc/spapr_hcall.c | 1 + > include/hw/ppc/spapr.h | 1 + > 3 files changed, 17 insertions(+) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 05abfc1..dd1d687 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1443,6 +1443,20 @@ static int spapr_post_load(void *opaque, int > version_id) > err = spapr_rtc_import_offset(&spapr->rtc, spapr->rtc_offset); > } > > + if (spapr->patb_entry) { > + if (kvmppc_has_cap_mmu_radix() && kvm_enabled()) { > + err = kvmppc_configure_v3_mmu(POWERPC_CPU(first_cpu), > + spapr->patb_flags & > + SPAPR_PROC_TABLE_RADIX, > + spapr->patb_flags & > + SPAPR_PROC_TABLE_GTSE,
You should be able to work out the things you need here from patb_entry without adding the new patb_flags field. > + spapr->patb_entry); > + } else { > + error_report("Radix guest is unsupported by the host"); > + return -EINVAL; > + } > + } > + > return err; > } > > @@ -1527,6 +1541,7 @@ static const VMStateDescription > vmstate_spapr_patb_entry = { > .needed = spapr_patb_entry_needed, > .fields = (VMStateField[]) { > VMSTATE_UINT64(patb_entry, sPAPRMachineState), > + VMSTATE_UINT64(patb_flags, sPAPRMachineState), > VMSTATE_END_OF_LIST() > }, > }; > diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c > index 768aa57..b002fae 100644 > --- a/hw/ppc/spapr_hcall.c > +++ b/hw/ppc/spapr_hcall.c > @@ -986,6 +986,7 @@ static target_ulong h_register_process_table(PowerPCCPU > *cpu, > spapr_check_setup_free_hpt(spapr, spapr->patb_entry, cproc); > > spapr->patb_entry = cproc; /* Save new process table */ > + spapr->patb_flags = flags; /* Save the flags */ > > /* Update the UPRT and GTSE bits in the LPCR for all cpus */ > CPU_FOREACH(cs) { > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index 5b39a26..c25a32e 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -75,6 +75,7 @@ struct sPAPRMachineState { > void *htab; > uint32_t htab_shift; > uint64_t patb_entry; /* Process tbl registed in H_REGISTER_PROCESS_TABLE > */ > + uint64_t patb_flags; > hwaddr rma_size; > int vrma_adjust; > ssize_t rtas_size; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature