[Qemu-devel] [PATCH] target/ppc: fix CPU hotplug when radix is enabled (TCG)

Cédric Le Goater posted 1 patch 6 years, 9 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1500048838-16802-1-git-send-email-clg@kaod.org
Test FreeBSD passed
Test checkpatch passed
Test docker passed
Test s390x passed
target/ppc/translate_init.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
[Qemu-devel] [PATCH] target/ppc: fix CPU hotplug when radix is enabled (TCG)
Posted by Cédric Le Goater 6 years, 9 months ago
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


Re: [Qemu-devel] [PATCH] target/ppc: fix CPU hotplug when radix is enabled (TCG)
Posted by David Gibson 6 years, 9 months ago
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
Re: [Qemu-devel] [PATCH] target/ppc: fix CPU hotplug when radix is enabled (TCG)
Posted by Suraj Jitindar Singh 6 years, 9 months ago
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;