KVM: selftests: Add helper for checking if running on powerpc pseries LPAR

PowerPC's PAPR L0 does not guarantee H_GUEST_CREATE/H_GUEST_CREATE_VCPU
hcalls to create upto MAX_VCPUS or hundreds of VMs, this is due to
limited resouces at L0 for guest management space. This helper allows us
to skip such tests which creates a lot of VMs/VCPUs, when we are running
nested.

Note that there is no easy way to differentiate between running nested
on PowerNV v/s kvm-on-powervm case. So we use a common helper to detect
any nested case.

The helper is added to the common kvm_util header file to avoid
sprinkling multiple #ifdef __powerpc64__ everywhere.

Suggested-by: Sean Christopherson <seanjc@google.com>
Tested-by: Anushree Mathur <anushree.mathur@linux.ibm.com>
Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Gautam Menghani <gautam@linux.ibm.com>
Tested-by: Gautam Menghani <gautam@linux.ibm.com>
Acked-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/294c0fcd19d6b00626e230985cf9906f98934d1c.1791280439.git.ritesh.list@gmail.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Ritesh Harjani (IBM) 2026-10-06 15:58:39 +05:30 committed by Sean Christopherson
parent 2bc2c4a810
commit 5527310b4d

View File

@ -14,6 +14,7 @@
#include <linux/kvm.h>
#include "linux/rbtree.h"
#include <linux/types.h>
#include <unistd.h>
#include <asm/atomic.h>
#include <asm/kvm.h>
@ -1054,6 +1055,22 @@ const char *exit_reason_str(unsigned int exit_reason);
bool kvm_arch_needs_naturally_aligned_page_tables(void);
/*
* True on powerpc when this host is a pseries LPAR (nested case).
* PowerPC's PAPR L0 does not guarantee H_GUEST_CREATE / H_GUEST_CREATE_VCPU up
* to MAX_VCPUS or creating hundreds of VMs - due to limited resouces at L0 for
* guest management space. This helper allows us to skip such tests when we are
* running nested.
*/
static inline bool kvm_is_ppc_pseries_lpar(void)
{
#ifdef __powerpc64__
return !access("/proc/device-tree/rtas/ibm,hypertas-functions", F_OK);
#else
return false;
#endif
}
gpa_t ____vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages, gpa_t min_gpa,
u32 memslot, bool protected, bool naturally_aligned);
gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages,