[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [RFC PATCH v1 6/6] spapr: Fix migration of Radix guests
From: |
Bharata B Rao |
Subject: |
[Qemu-ppc] [RFC PATCH v1 6/6] spapr: Fix migration of Radix guests |
Date: |
Wed, 17 May 2017 09:19:22 +0530 |
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 <address@hidden>
Signed-off-by: Bharata B Rao <address@hidden>
---
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,
+ 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;
--
2.7.4