diff mbox series

[1/2] KVM: PPC: Book3S HV: Allow creating max number of VCPUs on POWER9

Message ID 20180726054353.GB1672@fergus
State Accepted
Headers show
Series [1/2] KVM: PPC: Book3S HV: Allow creating max number of VCPUs on POWER9 | expand

Commit Message

Paul Mackerras July 26, 2018, 5:43 a.m. UTC
Commit 1e175d2 ("KVM: PPC: Book3S HV: Pack VCORE IDs to access full
VCPU ID space", 2018-07-25) allowed use of VCPU IDs up to
KVM_MAX_VCPU_ID on POWER9 in all guest SMT modes and guest emulated
hardware SMT modes.  However, with the current definition of
KVM_MAX_VCPU_ID, a guest SMT mode of 1 and an emulated SMT mode of 8,
it is only possible to create KVM_MAX_VCPUS / 2 VCPUS, because
threads_per_subcore is 4 on POWER9 CPUs.  (Using an emulated SMT mode
of 8 is useful when migrating VMs to or from POWER8 hosts.)

This increases KVM_MAX_VCPU_ID to 8 * KVM_MAX_VCPUS when HV KVM is
configured in, so that a full complement of KVM_MAX_VCPUS VCPUs can
be created on POWER9 in all guest SMT modes and emulated hardware
SMT modes.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
---
This and the next patch apply on my kvm-ppc-next branch, which
includes Sam Bobroff's patch "KVM: PPC: Book3S HV: Pack VCORE IDs to
access full VCPU ID space".

 arch/powerpc/include/asm/kvm_host.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Sam Bobroff July 30, 2018, 3:37 a.m. UTC | #1
On Thu, Jul 26, 2018 at 03:43:54PM +1000, Paul Mackerras wrote:
> Commit 1e175d2 ("KVM: PPC: Book3S HV: Pack VCORE IDs to access full
> VCPU ID space", 2018-07-25) allowed use of VCPU IDs up to
> KVM_MAX_VCPU_ID on POWER9 in all guest SMT modes and guest emulated
> hardware SMT modes.  However, with the current definition of
> KVM_MAX_VCPU_ID, a guest SMT mode of 1 and an emulated SMT mode of 8,
> it is only possible to create KVM_MAX_VCPUS / 2 VCPUS, because
> threads_per_subcore is 4 on POWER9 CPUs.  (Using an emulated SMT mode
> of 8 is useful when migrating VMs to or from POWER8 hosts.)
> 
> This increases KVM_MAX_VCPU_ID to 8 * KVM_MAX_VCPUS when HV KVM is
> configured in, so that a full complement of KVM_MAX_VCPUS VCPUs can
> be created on POWER9 in all guest SMT modes and emulated hardware
> SMT modes.
> 
> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
> ---
> This and the next patch apply on my kvm-ppc-next branch, which
> includes Sam Bobroff's patch "KVM: PPC: Book3S HV: Pack VCORE IDs to
> access full VCPU ID space".

Thanks!

I've tested kvm-ppc-next with all three above patches, and I'm able to
access the entire VCPU ID space (tested using CONFIG_NR_CPUS 1024 in the
host, rather than the default 2048, as that's the limit imposed by
QEMU). So:

Tested-by: Sam Bobroff <sbobroff@linux.ibm.com>

> 
>  arch/powerpc/include/asm/kvm_host.h | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
> index 5b9e660..906bcbdf 100644
> --- a/arch/powerpc/include/asm/kvm_host.h
> +++ b/arch/powerpc/include/asm/kvm_host.h
> @@ -42,7 +42,14 @@
>  #define KVM_USER_MEM_SLOTS	512
>  
>  #include <asm/cputhreads.h>
> -#define KVM_MAX_VCPU_ID                (threads_per_subcore * KVM_MAX_VCORES)
> +
> +#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> +#include <asm/kvm_book3s_asm.h>		/* for MAX_SMT_THREADS */
> +#define KVM_MAX_VCPU_ID		(MAX_SMT_THREADS * KVM_MAX_VCORES)
> +
> +#else
> +#define KVM_MAX_VCPU_ID		KVM_MAX_VCPUS
> +#endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */
>  
>  #define __KVM_HAVE_ARCH_INTC_INITIALIZED
>  
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBAg&c=jf_iaSHvJObTbx-siA1ZOg&r=FFlZoKpUuHop_w02rKHYxbjM9foF4tIm4FyKg8muba0&m=XJuK_j7qbnfsRxN3uHJ65CPxG7brNIut6LNuFyQYF8k&s=2zUtzqXA51owzthAuMl8kD0fWpLcjXBZswb_t6SYFSI&e=
>
diff mbox series

Patch

diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
index 5b9e660..906bcbdf 100644
--- a/arch/powerpc/include/asm/kvm_host.h
+++ b/arch/powerpc/include/asm/kvm_host.h
@@ -42,7 +42,14 @@ 
 #define KVM_USER_MEM_SLOTS	512
 
 #include <asm/cputhreads.h>
-#define KVM_MAX_VCPU_ID                (threads_per_subcore * KVM_MAX_VCORES)
+
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
+#include <asm/kvm_book3s_asm.h>		/* for MAX_SMT_THREADS */
+#define KVM_MAX_VCPU_ID		(MAX_SMT_THREADS * KVM_MAX_VCORES)
+
+#else
+#define KVM_MAX_VCPU_ID		KVM_MAX_VCPUS
+#endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */
 
 #define __KVM_HAVE_ARCH_INTC_INITIALIZED