KVM: PPC: Book3S HV: Add Power11 capability support for Nested PAPR guests
The Power11 architected and raw mode support in Linux was merged in commit
c2ed087ed35c ("powerpc: Add Power11 architected and raw mode"), and the
corresponding support in QEMU is pending in [1], which is currently in
its V6.
Currently, booting a KVM guest inside a pseries LPAR (Logical Partition)
on a kernel without P11 support results the guest boot in a Power10
compatibility mode (i.e., with logical PVR of Power10). However, booting
a KVM guest on a kernel with P11 support causes the following boot crash.
On a Power11 LPAR, the Power Hypervisor (L0) returns a support for both
Power10 and Power11 capabilities through H_GUEST_GET_CAPABILITIES hcall.
However, KVM currently supports only Power10 capabilities, resulting in
only Power10 capabilities being set as "nested capabilities" via an
H_GUEST_SET_CAPABILITIES hcall.
In the guest entry path, gs_msg_ops_kvmhv_nestedv2_config_fill_info() is
called by kvmhv_nestedv2_flush_vcpu() to fill the GSB (Guest State
Buffer) elements. The arch_compat is set to the logical PVR of Power11,
followed by an H_GUEST_SET_STATE hcall. This hcall returns
H_INVALID_ELEMENT_VALUE as a return code when setting a Power11 logical
PVR, as only Power10 capabilities were communicated as supported between
PHYP and KVM, utimately resulting in the KVM guest boot crash.
KVM: unknown exit, hardware reason
ffffffffffffffea
NIP
000000007daf97e0 LR
000000007daf1aec CTR
000000007daf1ab4 XER
0000000020040000 CPU#0
MSR
8000000000103000 HID0
0000000000000000 HF
6c002000 iidx 3 didx 3
TB
00000000 00000000 DECR 0
GPR00
8000000000003000 000000007e580e20 000000007db26700 0000000000000000
GPR04
00000000041a0c80 000000007df7f000 0000000000200000 000000007df7f000
GPR08
000000007db6d5d8 000000007e65fa90 000000007db6d5d0 0000000000003000
GPR12
8000000000000001 0000000000000000 0000000000000000 0000000000000000
GPR16
0000000000000000 0000000000000000 0000000000000000 0000000000000000
GPR20
0000000000000000 0000000000000000 0000000000000000 000000007db21a30
GPR24
000000007db65000 0000000000000000 0000000000000000 0000000000000003
GPR28
000000007db6d5e0 000000007db22220 000000007daf27ac 000000007db75000
CR
20000404 [ E - - - - G - G ] RES 000@
ffffffffffffffff
SRR0
000000007daf97e0 SRR1
8000000000102000 PVR
0000000000820200 VRSAVE
0000000000000000
SPRG0
0000000000000000 SPRG1
000000000000ff20 SPRG2
0000000000000000 SPRG3
0000000000000000
SPRG4
0000000000000000 SPRG5
0000000000000000 SPRG6
0000000000000000 SPRG7
0000000000000000
CFAR
0000000000000000
LPCR
0000000000020400
PTCR
0000000000000000 DAR
0000000000000000 DSISR
0000000000000000
Fix this by adding the Power11 capability support and the required
plumbing in place.
Note:
* Booting a Power11 KVM nested PAPR guest requires [1] in QEMU.
[1] https://lore.kernel.org/all/
20240731055022.696051-1-adityag@linux.ibm.com/
Signed-off-by: Amit Machhiwal <amachhiw@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://patch.msgid.link/20241028101622.741573-1-amachhiw@linux.ibm.com