mirror of
https://github.com/qemu/qemu.git
synced 2024-12-11 12:43:55 +08:00
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;
|
||||
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
|
||||
" mmu_idx %u 0x%"HWADDR_PRIx"\n",
|
||||
__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
|
||||
* 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);
|
||||
if (ret) {
|
||||
return ret;
|
||||
@ -519,11 +527,11 @@ static int ppc_radix64_process_scoped_xlate(PowerPCCPU *cpu,
|
||||
* translation
|
||||
*/
|
||||
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 */
|
||||
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) {
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user