But when a guest initializes radix mode, it issues a H_REGISTER_PROC_TBL
to update the LPCR of all CPUs. Hot-plugged CPUs inherit from the same
setting under KVM but not under TCG. So, Let's check for radix and update
the default LPCR to keep new CPUs in sync.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
target/ppc/translate_init.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/target/ppc/translate_init.c b/target/ppc/translate_init.c
index 8b9807665dd5..8776e9b0f8fa 100644
--- a/target/ppc/translate_init.c
+++ b/target/ppc/translate_init.c
@@ -9014,8 +9014,16 @@ void cpu_ppc_set_papr(PowerPCCPU *cpu, PPCVirtualHypervisor *vhyp)
/* By default we choose legacy mode and switch to new hash or radix
* when a register process table hcall is made. So disable process
* tables and guest translation shootdown by default
+ *
+ * Hot-plugged CPUs inherit from the guest radix setting under
+ * KVM but not under TCG. Update the default LPCR to keep new
+ * CPUs in sync when radix is enabled.
*/
- lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE);
+ if (ppc64_radix_guest(cpu)) {
+ lpcr->default_value |= LPCR_UPRT | LPCR_GTSE;
+ } else {
+ lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE);
+ }
lpcr->default_value |= LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE |
LPCR_OEE;
break;
--
2.7.5
On Fri, Jul 14, 2017 at 06:13:58PM +0200, Cédric Le Goater wrote: > But when a guest initializes radix mode, it issues a H_REGISTER_PROC_TBL > to update the LPCR of all CPUs. Hot-plugged CPUs inherit from the same > setting under KVM but not under TCG. So, Let's check for radix and update > the default LPCR to keep new CPUs in sync. > > Signed-off-by: Cédric Le Goater <clg@kaod.org> Applied to ppc-for-2.10, thanks. > --- > target/ppc/translate_init.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/target/ppc/translate_init.c b/target/ppc/translate_init.c > index 8b9807665dd5..8776e9b0f8fa 100644 > --- a/target/ppc/translate_init.c > +++ b/target/ppc/translate_init.c > @@ -9014,8 +9014,16 @@ void cpu_ppc_set_papr(PowerPCCPU *cpu, PPCVirtualHypervisor *vhyp) > /* By default we choose legacy mode and switch to new hash or radix > * when a register process table hcall is made. So disable process > * tables and guest translation shootdown by default > + * > + * Hot-plugged CPUs inherit from the guest radix setting under > + * KVM but not under TCG. Update the default LPCR to keep new > + * CPUs in sync when radix is enabled. > */ > - lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE); > + if (ppc64_radix_guest(cpu)) { > + lpcr->default_value |= LPCR_UPRT | LPCR_GTSE; > + } else { > + lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE); > + } > lpcr->default_value |= LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | > LPCR_OEE; > break; -- 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
On Fri, 2017-07-14 at 18:13 +0200, Cédric Le Goater wrote: > But when a guest initializes radix mode, it issues a > H_REGISTER_PROC_TBL > to update the LPCR of all CPUs. Hot-plugged CPUs inherit from the > same > setting under KVM but not under TCG. So, Let's check for radix and > update > the default LPCR to keep new CPUs in sync. > > Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > --- > target/ppc/translate_init.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/target/ppc/translate_init.c > b/target/ppc/translate_init.c > index 8b9807665dd5..8776e9b0f8fa 100644 > --- a/target/ppc/translate_init.c > +++ b/target/ppc/translate_init.c > @@ -9014,8 +9014,16 @@ void cpu_ppc_set_papr(PowerPCCPU *cpu, > PPCVirtualHypervisor *vhyp) > /* By default we choose legacy mode and switch to new hash > or radix > * when a register process table hcall is made. So disable > process > * tables and guest translation shootdown by default > + * > + * Hot-plugged CPUs inherit from the guest radix setting > under > + * KVM but not under TCG. Update the default LPCR to keep > new > + * CPUs in sync when radix is enabled. > */ > - lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE); > + if (ppc64_radix_guest(cpu)) { > + lpcr->default_value |= LPCR_UPRT | LPCR_GTSE; Since we can't do radix without GTSE, I guess for now at least RADIX implies GTSE. > + } else { > + lpcr->default_value &= ~(LPCR_UPRT | LPCR_GTSE); > + } > lpcr->default_value |= LPCR_PDEE | LPCR_HDEE | LPCR_EEE | > LPCR_DEE | > LPCR_OEE; > break;
© 2016 - 2024 Red Hat, Inc.