Hello, The Radix tree translation model currently supports process-scoped translation for the PowerNV machine (Hypervisor mode) and for the pSeries machine (Guest mode). Guests running under an emulated Hypervisor (PowerNV machine) require a new type of Radix translation, called partition-scoped, which is missing today.
The Radix tree translation is a 2 steps process. The first step, process-scoped translation, converts an effective Address to a guest real address, and the second step, partition-scoped translation, converts a guest real address to a host real address. There are difference cases to covers : * Hypervisor real mode access: no Radix translation. * Hypervisor or host application access (quadrant 0 and 3) with relocation on: process-scoped translation. * Guest OS real mode access: only partition-scoped translation. * Guest OS real or guest application access (quadrant 0 and 3) with relocation on: both process-scoped translation and partition-scoped translations. * Hypervisor access in quadrant 1 and 2 with relocation on: both process-scoped translation and partition-scoped translations. The radix tree partition-scoped translation is performed using tables pointed to by the first double-word of the Partition Table Entries and process-scoped translation uses tables pointed to by the Process Table Entries (second double-word of the Partition Table Entries). Both partition-scoped and process-scoped translations process are identical and thus the radix tree traversing code is largely reused. However, errors in partition-scoped translations generate hypervisor exceptions. Based on work from Suraj Jitindar Singh <sjitindarsi...@gmail.com> Thanks, C. Changes since v1: - removed checks (cpu->vhyp && lpid == 0) - changed ppc_radix64_walk_tree() and ppc_radix64_next_level() to use an 'AddressSpace *' - moved call to ppc_radix64_get_fully_qualified_addr() under ppc_radix64_xlate() - reworked the prototype of the routines raising the exceptions to take a 'cause_excp' bool. - re-introduced an extra test on nls in ppc_radix64_walk_tree() Cédric Le Goater (4): target/ppc: Introduce ppc_radix64_xlate() for Radix tree translation target/ppc: Extend ppc_radix64_check_prot() with a 'partition_scoped' bool target/ppc: Rework ppc_radix64_walk_tree() for partition-scoped translation target/ppc: Add support for Radix partition-scoped translation target/ppc/cpu.h | 3 + target/ppc/excp_helper.c | 3 +- target/ppc/mmu-radix64.c | 434 ++++++++++++++++++++++++++++----------- 3 files changed, 319 insertions(+), 121 deletions(-) -- 2.21.1