spapr: implement nested-hv capability for the virtual hypervisor
commit120f738a4671977481546ff3027232f0c911127d
authorNicholas Piggin <npiggin@gmail.com>
Fri, 18 Feb 2022 07:34:14 +0000 (18 08:34 +0100)
committerCédric Le Goater <clg@kaod.org>
Fri, 18 Feb 2022 07:34:14 +0000 (18 08:34 +0100)
tree4e17367bc9a85f66d681be31052e2bc9d270dbc7
parent7cebc5db2eba6dc655b62af41e52716fc4fa66ae
spapr: implement nested-hv capability for the virtual hypervisor

This implements the Nested KVM HV hcall API for spapr under TCG.

The L2 is switched in when the H_ENTER_NESTED hcall is made, and the
L1 is switched back in returned from the hcall when a HV exception
is sent to the vhyp. Register state is copied in and out according to
the nested KVM HV hcall API specification.

The hdecr timer is started when the L2 is switched in, and it provides
the HDEC / 0x980 return to L1.

The MMU re-uses the bare metal radix 2-level page table walker by
using the get_pate method to point the MMU to the nested partition
table entry. MMU faults due to partition scope errors raise HV
exceptions and accordingly are routed back to the L1.

The MMU does not tag translations for the L1 (direct) vs L2 (nested)
guests, so the TLB is flushed on any L1<->L2 transition (hcall entry
and exit).

Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
[ clg: checkpatch fixes ]
Message-Id: <20220216102545.1808018-10-npiggin@gmail.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
hw/ppc/spapr.c
hw/ppc/spapr_caps.c
hw/ppc/spapr_hcall.c
include/hw/ppc/spapr.h
include/hw/ppc/spapr_cpu_core.h