target/ppc: Change partition-scope translate interface
Rather than always performing partition scope page table translation with access type of 0 (MMU_DATA_LOAD), pass through the processor access type which first initiated the translation sequence. Process- scoped page table loads are then set to MMU_DATA_LOAD access type in the xlate function. This will allow more information to be passed to the exception handler in the next patch. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
888050cf51
commit
74574c3845
@ -380,6 +380,14 @@ static int ppc_radix64_partition_scoped_xlate(PowerPCCPU *cpu,
|
|||||||
hwaddr pte_addr;
|
hwaddr pte_addr;
|
||||||
uint64_t pte;
|
uint64_t pte;
|
||||||
|
|
||||||
|
if (pde_addr) {
|
||||||
|
/*
|
||||||
|
* Translation of process-scoped tables/directories is performed as
|
||||||
|
* a read-access.
|
||||||
|
*/
|
||||||
|
access_type = MMU_DATA_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
qemu_log_mask(CPU_LOG_MMU, "%s for %s @0x%"VADDR_PRIx
|
qemu_log_mask(CPU_LOG_MMU, "%s for %s @0x%"VADDR_PRIx
|
||||||
" mmu_idx %u 0x%"HWADDR_PRIx"\n",
|
" mmu_idx %u 0x%"HWADDR_PRIx"\n",
|
||||||
__func__, access_str(access_type),
|
__func__, access_str(access_type),
|
||||||
@ -477,10 +485,10 @@ static int ppc_radix64_process_scoped_xlate(PowerPCCPU *cpu,
|
|||||||
* is only used to translate the effective addresses of the
|
* is only used to translate the effective addresses of the
|
||||||
* process table entries.
|
* process table entries.
|
||||||
*/
|
*/
|
||||||
ret = ppc_radix64_partition_scoped_xlate(cpu, 0, eaddr, prtbe_addr,
|
|
||||||
pate, &h_raddr, &h_prot,
|
|
||||||
&h_page_size, true,
|
|
||||||
/* mmu_idx is 5 because we're translating from hypervisor scope */
|
/* mmu_idx is 5 because we're translating from hypervisor scope */
|
||||||
|
ret = ppc_radix64_partition_scoped_xlate(cpu, access_type, eaddr,
|
||||||
|
prtbe_addr, pate, &h_raddr,
|
||||||
|
&h_prot, &h_page_size, true,
|
||||||
5, guest_visible);
|
5, guest_visible);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
@ -519,11 +527,11 @@ static int ppc_radix64_process_scoped_xlate(PowerPCCPU *cpu,
|
|||||||
* translation
|
* translation
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
ret = ppc_radix64_partition_scoped_xlate(cpu, 0, eaddr, pte_addr,
|
|
||||||
pate, &h_raddr, &h_prot,
|
|
||||||
&h_page_size, true,
|
|
||||||
/* mmu_idx is 5 because we're translating from hypervisor scope */
|
/* mmu_idx is 5 because we're translating from hypervisor scope */
|
||||||
5, guest_visible);
|
ret = ppc_radix64_partition_scoped_xlate(cpu, access_type, eaddr,
|
||||||
|
pte_addr, pate, &h_raddr,
|
||||||
|
&h_prot, &h_page_size,
|
||||||
|
true, 5, guest_visible);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user