Message ID | 0a55610186f38c9dbbad8cc948af3986d945e796.1715125376.git.balaton@eik.bme.hu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Misc PPC exception and BookE MMU clean ups | expand |
On Wed May 8, 2024 at 10:15 AM AEST, BALATON Zoltan wrote: > Move the debug logging within ppc6xx_tlb_check() from after its only > call to simplify the caller. > I *think* the logic looks right. > Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> > --- > target/ppc/mmu_common.c | 55 +++++++++++++++++++---------------------- > 1 file changed, 26 insertions(+), 29 deletions(-) > > diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c > index 9d337a73ba..b2f2cee1a8 100644 > --- a/target/ppc/mmu_common.c > +++ b/target/ppc/mmu_common.c > @@ -225,17 +225,14 @@ static int ppc6xx_tlb_check(CPUPPCState *env, mmu_ctx_t *ctx, > access_type == MMU_INST_FETCH ? 'I' : 'D'); > switch (ppc6xx_tlb_pte_check(ctx, tlb->pte0, tlb->pte1, > 0, access_type)) { > - case -3: > - /* TLB inconsistency */ > - return -1; > case -2: > /* Access violation */ > ret = -2; > best = nr; > break; > - case -1: > + case -1: /* No match */ > + case -3: /* TLB inconsistency */ > default: > - /* No match */ > break; > case 0: > /* access granted */ > @@ -251,14 +248,37 @@ static int ppc6xx_tlb_check(CPUPPCState *env, mmu_ctx_t *ctx, > } > } > if (best != -1) { > - done: > +done: > qemu_log_mask(CPU_LOG_MMU, "found TLB at addr " HWADDR_FMT_plx > " prot=%01x ret=%d\n", > ctx->raddr & TARGET_PAGE_MASK, ctx->prot, ret); > /* Update page flags */ > pte_update_flags(ctx, &env->tlb.tlb6[best].pte1, ret, access_type); > } > +#if defined(DUMP_PAGE_TABLES) > + if (qemu_loglevel_mask(CPU_LOG_MMU)) { > + CPUState *cs = env_cpu(env); > + PowerPCCPU *cpu = env_archcpu(env); Do you need to de-indent this one level? Otherwise, Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Thanks, Nick > + hwaddr curaddr; > + uint32_t a0, a1, a2, a3; > > + qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx "\n", > + ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu) + 0x80); > + for (curaddr = ppc_hash32_hpt_base(cpu); > + curaddr < (ppc_hash32_hpt_base(cpu) > + + ppc_hash32_hpt_mask(cpu) + 0x80); > + curaddr += 16) { > + a0 = ldl_phys(cs->as, curaddr); > + a1 = ldl_phys(cs->as, curaddr + 4); > + a2 = ldl_phys(cs->as, curaddr + 8); > + a3 = ldl_phys(cs->as, curaddr + 12); > + if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) { > + qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n", > + curaddr, a0, a1, a2, a3); > + } > + } > + } > +#endif > return ret; > } > > @@ -420,29 +440,6 @@ static int mmu6xx_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx, > ctx->raddr = (hwaddr)-1ULL; > /* Software TLB search */ > ret = ppc6xx_tlb_check(env, ctx, eaddr, access_type); > -#if defined(DUMP_PAGE_TABLES) > - if (qemu_loglevel_mask(CPU_LOG_MMU)) { > - CPUState *cs = env_cpu(env); > - hwaddr curaddr; > - uint32_t a0, a1, a2, a3; > - > - qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx "\n", > - ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu) + 0x80); > - for (curaddr = ppc_hash32_hpt_base(cpu); > - curaddr < (ppc_hash32_hpt_base(cpu) > - + ppc_hash32_hpt_mask(cpu) + 0x80); > - curaddr += 16) { > - a0 = ldl_phys(cs->as, curaddr); > - a1 = ldl_phys(cs->as, curaddr + 4); > - a2 = ldl_phys(cs->as, curaddr + 8); > - a3 = ldl_phys(cs->as, curaddr + 12); > - if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) { > - qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n", > - curaddr, a0, a1, a2, a3); > - } > - } > - } > -#endif > } else { > qemu_log_mask(CPU_LOG_MMU, "direct store...\n"); > /* Direct-store segment : absolutely *BUGGY* for now */
diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c index 9d337a73ba..b2f2cee1a8 100644 --- a/target/ppc/mmu_common.c +++ b/target/ppc/mmu_common.c @@ -225,17 +225,14 @@ static int ppc6xx_tlb_check(CPUPPCState *env, mmu_ctx_t *ctx, access_type == MMU_INST_FETCH ? 'I' : 'D'); switch (ppc6xx_tlb_pte_check(ctx, tlb->pte0, tlb->pte1, 0, access_type)) { - case -3: - /* TLB inconsistency */ - return -1; case -2: /* Access violation */ ret = -2; best = nr; break; - case -1: + case -1: /* No match */ + case -3: /* TLB inconsistency */ default: - /* No match */ break; case 0: /* access granted */ @@ -251,14 +248,37 @@ static int ppc6xx_tlb_check(CPUPPCState *env, mmu_ctx_t *ctx, } } if (best != -1) { - done: +done: qemu_log_mask(CPU_LOG_MMU, "found TLB at addr " HWADDR_FMT_plx " prot=%01x ret=%d\n", ctx->raddr & TARGET_PAGE_MASK, ctx->prot, ret); /* Update page flags */ pte_update_flags(ctx, &env->tlb.tlb6[best].pte1, ret, access_type); } +#if defined(DUMP_PAGE_TABLES) + if (qemu_loglevel_mask(CPU_LOG_MMU)) { + CPUState *cs = env_cpu(env); + PowerPCCPU *cpu = env_archcpu(env); + hwaddr curaddr; + uint32_t a0, a1, a2, a3; + qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx "\n", + ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu) + 0x80); + for (curaddr = ppc_hash32_hpt_base(cpu); + curaddr < (ppc_hash32_hpt_base(cpu) + + ppc_hash32_hpt_mask(cpu) + 0x80); + curaddr += 16) { + a0 = ldl_phys(cs->as, curaddr); + a1 = ldl_phys(cs->as, curaddr + 4); + a2 = ldl_phys(cs->as, curaddr + 8); + a3 = ldl_phys(cs->as, curaddr + 12); + if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) { + qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n", + curaddr, a0, a1, a2, a3); + } + } + } +#endif return ret; } @@ -420,29 +440,6 @@ static int mmu6xx_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx, ctx->raddr = (hwaddr)-1ULL; /* Software TLB search */ ret = ppc6xx_tlb_check(env, ctx, eaddr, access_type); -#if defined(DUMP_PAGE_TABLES) - if (qemu_loglevel_mask(CPU_LOG_MMU)) { - CPUState *cs = env_cpu(env); - hwaddr curaddr; - uint32_t a0, a1, a2, a3; - - qemu_log("Page table: " HWADDR_FMT_plx " len " HWADDR_FMT_plx "\n", - ppc_hash32_hpt_base(cpu), ppc_hash32_hpt_mask(cpu) + 0x80); - for (curaddr = ppc_hash32_hpt_base(cpu); - curaddr < (ppc_hash32_hpt_base(cpu) - + ppc_hash32_hpt_mask(cpu) + 0x80); - curaddr += 16) { - a0 = ldl_phys(cs->as, curaddr); - a1 = ldl_phys(cs->as, curaddr + 4); - a2 = ldl_phys(cs->as, curaddr + 8); - a3 = ldl_phys(cs->as, curaddr + 12); - if (a0 != 0 || a1 != 0 || a2 != 0 || a3 != 0) { - qemu_log(HWADDR_FMT_plx ": %08x %08x %08x %08x\n", - curaddr, a0, a1, a2, a3); - } - } - } -#endif } else { qemu_log_mask(CPU_LOG_MMU, "direct store...\n"); /* Direct-store segment : absolutely *BUGGY* for now */
Move the debug logging within ppc6xx_tlb_check() from after its only call to simplify the caller. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> --- target/ppc/mmu_common.c | 55 +++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 29 deletions(-)