Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: Book3S HV: Increase KVMPPC_NR_LPIDS on POWER8 and POWER9

POWER8 and POWER9 have 12-bit LPIDs. Change LPID_RSVD to support up to
(4096 - 2) guests on these processors. POWER7 is kept the same with a
limitation of (1024 - 2), but it might be time to drop KVM support for
POWER7.

Tested with 2048 guests * 4 vCPUs on a witherspoon system with 512G
RAM and a bit of swap.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>

authored by

Cédric Le Goater and committed by
Paul Mackerras
e55f4d58 4cb4ade1

+8 -3
+2 -1
arch/powerpc/include/asm/reg.h
··· 473 473 #ifndef SPRN_LPID 474 474 #define SPRN_LPID 0x13F /* Logical Partition Identifier */ 475 475 #endif 476 - #define LPID_RSVD 0x3ff /* Reserved LPID for partn switching */ 476 + #define LPID_RSVD_POWER7 0x3ff /* Reserved LPID for partn switching */ 477 + #define LPID_RSVD 0xfff /* Reserved LPID for partn switching */ 477 478 #define SPRN_HMER 0x150 /* Hypervisor maintenance exception reg */ 478 479 #define HMER_DEBUG_TRIG (1ul << (63 - 17)) /* Debug trigger */ 479 480 #define SPRN_HMEER 0x151 /* Hyp maintenance exception enable reg */
+6 -2
arch/powerpc/kvm/book3s_64_mmu_hv.c
··· 260 260 if (!mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE)) 261 261 return -EINVAL; 262 262 263 - /* POWER7 has 10-bit LPIDs (12-bit in POWER8) */ 264 263 host_lpid = 0; 265 264 if (cpu_has_feature(CPU_FTR_HVMODE)) 266 265 host_lpid = mfspr(SPRN_LPID); 267 - rsvd_lpid = LPID_RSVD; 266 + 267 + /* POWER8 and above have 12-bit LPIDs (10-bit in POWER7) */ 268 + if (cpu_has_feature(CPU_FTR_ARCH_207S)) 269 + rsvd_lpid = LPID_RSVD; 270 + else 271 + rsvd_lpid = LPID_RSVD_POWER7; 268 272 269 273 kvmppc_init_lpid(rsvd_lpid + 1); 270 274