mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target/ppc/mmu_common.c: Stop using ctx in ppc6xx_tlb_check()
Pass raddr and prot in function parameters instead. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
da5c1d20e9
commit
aa781c102a
1 changed files with 13 additions and 13 deletions
|
@ -91,10 +91,9 @@ int ppc6xx_tlb_getnum(CPUPPCState *env, target_ulong eaddr,
|
||||||
|
|
||||||
/* Software driven TLB helpers */
|
/* Software driven TLB helpers */
|
||||||
|
|
||||||
static int ppc6xx_tlb_check(CPUPPCState *env,
|
static int ppc6xx_tlb_check(CPUPPCState *env, hwaddr *raddr, int *prot,
|
||||||
mmu_ctx_t *ctx, target_ulong eaddr,
|
target_ulong eaddr, MMUAccessType access_type,
|
||||||
MMUAccessType access_type, target_ulong ptem,
|
target_ulong ptem, bool key, bool nx)
|
||||||
bool key, bool nx)
|
|
||||||
{
|
{
|
||||||
ppc6xx_tlb_t *tlb;
|
ppc6xx_tlb_t *tlb;
|
||||||
target_ulong *pte1p;
|
target_ulong *pte1p;
|
||||||
|
@ -102,7 +101,7 @@ static int ppc6xx_tlb_check(CPUPPCState *env,
|
||||||
bool is_code = (access_type == MMU_INST_FETCH);
|
bool is_code = (access_type == MMU_INST_FETCH);
|
||||||
|
|
||||||
/* Initialize real address with an invalid value */
|
/* Initialize real address with an invalid value */
|
||||||
ctx->raddr = (hwaddr)-1ULL;
|
*raddr = (hwaddr)-1ULL;
|
||||||
best = -1;
|
best = -1;
|
||||||
ret = -1; /* No TLB found */
|
ret = -1; /* No TLB found */
|
||||||
for (way = 0; way < env->nb_ways; way++) {
|
for (way = 0; way < env->nb_ways; way++) {
|
||||||
|
@ -130,17 +129,17 @@ static int ppc6xx_tlb_check(CPUPPCState *env,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* all matches should have equal RPN, WIMG & PP */
|
/* all matches should have equal RPN, WIMG & PP */
|
||||||
if (ctx->raddr != (hwaddr)-1ULL &&
|
if (*raddr != (hwaddr)-1ULL &&
|
||||||
(ctx->raddr & PTE_CHECK_MASK) != (tlb->pte1 & PTE_CHECK_MASK)) {
|
(*raddr & PTE_CHECK_MASK) != (tlb->pte1 & PTE_CHECK_MASK)) {
|
||||||
qemu_log_mask(CPU_LOG_MMU, "Bad RPN/WIMG/PP\n");
|
qemu_log_mask(CPU_LOG_MMU, "Bad RPN/WIMG/PP\n");
|
||||||
/* TLB inconsistency */
|
/* TLB inconsistency */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* Keep the matching PTE information */
|
/* Keep the matching PTE information */
|
||||||
best = nr;
|
best = nr;
|
||||||
ctx->raddr = tlb->pte1;
|
*raddr = tlb->pte1;
|
||||||
ctx->prot = ppc_hash32_prot(key, tlb->pte1 & HPTE32_R_PP, nx);
|
*prot = ppc_hash32_prot(key, tlb->pte1 & HPTE32_R_PP, nx);
|
||||||
if (check_prot_access_type(ctx->prot, access_type)) {
|
if (check_prot_access_type(*prot, access_type)) {
|
||||||
qemu_log_mask(CPU_LOG_MMU, "PTE access granted !\n");
|
qemu_log_mask(CPU_LOG_MMU, "PTE access granted !\n");
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -152,7 +151,7 @@ static int ppc6xx_tlb_check(CPUPPCState *env,
|
||||||
if (best != -1) {
|
if (best != -1) {
|
||||||
qemu_log_mask(CPU_LOG_MMU, "found TLB at addr " HWADDR_FMT_plx
|
qemu_log_mask(CPU_LOG_MMU, "found TLB at addr " HWADDR_FMT_plx
|
||||||
" prot=%01x ret=%d\n",
|
" prot=%01x ret=%d\n",
|
||||||
ctx->raddr & TARGET_PAGE_MASK, ctx->prot, ret);
|
*raddr & TARGET_PAGE_MASK, *prot, ret);
|
||||||
/* Update page flags */
|
/* Update page flags */
|
||||||
pte1p = &env->tlb.tlb6[best].pte1;
|
pte1p = &env->tlb.tlb6[best].pte1;
|
||||||
*pte1p |= 0x00000100; /* Update accessed flag */
|
*pte1p |= 0x00000100; /* Update accessed flag */
|
||||||
|
@ -162,7 +161,7 @@ static int ppc6xx_tlb_check(CPUPPCState *env,
|
||||||
*pte1p |= 0x00000080;
|
*pte1p |= 0x00000080;
|
||||||
} else {
|
} else {
|
||||||
/* Force page fault for first write access */
|
/* Force page fault for first write access */
|
||||||
ctx->prot &= ~PAGE_WRITE;
|
*prot &= ~PAGE_WRITE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,7 +343,8 @@ static int mmu6xx_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx,
|
||||||
*hashp = hash;
|
*hashp = hash;
|
||||||
|
|
||||||
/* Software TLB search */
|
/* Software TLB search */
|
||||||
return ppc6xx_tlb_check(env, ctx, eaddr, access_type, ptem, key, nx);
|
return ppc6xx_tlb_check(env, &ctx->raddr, &ctx->prot, eaddr,
|
||||||
|
access_type, ptem, key, nx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Direct-store segment : absolutely *BUGGY* for now */
|
/* Direct-store segment : absolutely *BUGGY* for now */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue