[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 80/96] target/ppc/mmu_common.c: Inline and remove ppc6xx_tlb_pte_c
From: |
Nicholas Piggin |
Subject: |
[PULL 80/96] target/ppc/mmu_common.c: Inline and remove ppc6xx_tlb_pte_check() |
Date: |
Fri, 26 Jul 2024 09:53:53 +1000 |
From: BALATON Zoltan <balaton@eik.bme.hu>
This function is only called once and we can make the caller simpler
by inlining it.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
target/ppc/mmu_common.c | 71 +++++++++++++----------------------------
1 file changed, 22 insertions(+), 49 deletions(-)
diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c
index b2993e8563..784e833ff2 100644
--- a/target/ppc/mmu_common.c
+++ b/target/ppc/mmu_common.c
@@ -91,33 +91,6 @@ int ppc6xx_tlb_getnum(CPUPPCState *env, target_ulong eaddr,
return nr;
}
-static int ppc6xx_tlb_pte_check(mmu_ctx_t *ctx, target_ulong pte0,
- target_ulong pte1, int pteh,
- MMUAccessType access_type, bool nx)
-{
- /* Check validity and table match */
- if (!pte_is_valid(pte0) || ((pte0 >> 6) & 1) != pteh ||
- (pte0 & PTE_PTEM_MASK) != ctx->ptem) {
- return -1;
- }
- /* all matches should have equal RPN, WIMG & PP */
- if (ctx->raddr != (hwaddr)-1ULL &&
- (ctx->raddr & PTE_CHECK_MASK) != (pte1 & PTE_CHECK_MASK)) {
- qemu_log_mask(CPU_LOG_MMU, "Bad RPN/WIMG/PP\n");
- return -3;
- }
- /* Keep the matching PTE information */
- ctx->raddr = pte1;
- ctx->prot = ppc_hash32_prot(ctx->key, pte1 & HPTE32_R_PP, nx);
- if (check_prot_access_type(ctx->prot, access_type)) {
- qemu_log_mask(CPU_LOG_MMU, "PTE access granted !\n");
- return 0;
- } else {
- qemu_log_mask(CPU_LOG_MMU, "PTE access rejected\n");
- return -2;
- }
-}
-
/* Software driven TLB helpers */
static int ppc6xx_tlb_check(CPUPPCState *env,
@@ -149,32 +122,32 @@ static int ppc6xx_tlb_check(CPUPPCState *env,
tlb->EPN, eaddr, tlb->pte1,
access_type == MMU_DATA_STORE ? 'S' : 'L',
access_type == MMU_INST_FETCH ? 'I' : 'D');
- switch (ppc6xx_tlb_pte_check(ctx, tlb->pte0, tlb->pte1,
- 0, access_type, nx)) {
- case -2:
- /* Access violation */
- ret = -2;
- best = nr;
- break;
- case -1: /* No match */
- case -3: /* TLB inconsistency */
- default:
- break;
- case 0:
- /* access granted */
- /*
- * XXX: we should go on looping to check all TLBs
- * consistency but we can speed-up the whole thing as
- * the result would be undefined if TLBs are not
- * consistent.
- */
+ /* Check validity and table match */
+ if (!pte_is_valid(tlb->pte0) || ((tlb->pte0 >> 6) & 1) != 0 ||
+ (tlb->pte0 & PTE_PTEM_MASK) != ctx->ptem) {
+ continue;
+ }
+ /* all matches should have equal RPN, WIMG & PP */
+ if (ctx->raddr != (hwaddr)-1ULL &&
+ (ctx->raddr & PTE_CHECK_MASK) != (tlb->pte1 & PTE_CHECK_MASK)) {
+ qemu_log_mask(CPU_LOG_MMU, "Bad RPN/WIMG/PP\n");
+ /* TLB inconsistency */
+ continue;
+ }
+ /* Keep the matching PTE information */
+ best = nr;
+ ctx->raddr = tlb->pte1;
+ ctx->prot = ppc_hash32_prot(ctx->key, tlb->pte1 & HPTE32_R_PP, nx);
+ if (check_prot_access_type(ctx->prot, access_type)) {
+ qemu_log_mask(CPU_LOG_MMU, "PTE access granted !\n");
ret = 0;
- best = nr;
- goto done;
+ break;
+ } else {
+ qemu_log_mask(CPU_LOG_MMU, "PTE access rejected\n");
+ ret = -2;
}
}
if (best != -1) {
-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);
--
2.45.2
- [PULL 70/96] target/ppc/mmu_common.c: Remove yet another single use local variable, (continued)
- [PULL 70/96] target/ppc/mmu_common.c: Remove yet another single use local variable, Nicholas Piggin, 2024/07/25
- [PULL 72/96] target/ppc/mmu_common.c: Simplify ppc6xx_tlb_pte_check(), Nicholas Piggin, 2024/07/25
- [PULL 73/96] target/ppc/mmu_common.c: Remove unused field from mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 74/96] target/ppc/mmu_common.c: Remove hash field from mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 75/96] target/ppc/mmu_common.c: Remove pte_update_flags(), Nicholas Piggin, 2024/07/25
- [PULL 77/96] target/ppc/mmu_common.c: Convert local variable to bool, Nicholas Piggin, 2024/07/25
- [PULL 71/96] target/ppc/mmu_common.c: Return directly in ppc6xx_tlb_pte_check(), Nicholas Piggin, 2024/07/25
- [PULL 76/96] target/ppc/mmu_common.c: Remove nx field from mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 78/96] target/ppc/mmu_common.c: Remove single use local variable, Nicholas Piggin, 2024/07/25
- [PULL 79/96] target/ppc/mmu_common.c: Simplify a switch statement, Nicholas Piggin, 2024/07/25
- [PULL 80/96] target/ppc/mmu_common.c: Inline and remove ppc6xx_tlb_pte_check(),
Nicholas Piggin <=
- [PULL 81/96] target/ppc/mmu_common.c: Remove ptem field from mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 82/96] target/ppc: Add function to get protection key for hash32 MMU, Nicholas Piggin, 2024/07/25
- [PULL 83/96] target/ppc/mmu-hash32.c: Inline and remove ppc_hash32_pte_prot(), Nicholas Piggin, 2024/07/25
- [PULL 84/96] target/ppc/mmu_common.c: Init variable in function that relies on it, Nicholas Piggin, 2024/07/25
- [PULL 85/96] target/ppc/mmu_common.c: Remove key field from mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 86/96] target/ppc/mmu_common.c: Stop using ctx in ppc6xx_tlb_check(), Nicholas Piggin, 2024/07/25
- [PULL 87/96] target/ppc/mmu_common.c: Rename function parameter, Nicholas Piggin, 2024/07/25
- [PULL 89/96] target/ppc: Remove bat_size_prot(), Nicholas Piggin, 2024/07/25
- [PULL 91/96] target/ppc/mmu_common.c: Remove mmu_ctx_t, Nicholas Piggin, 2024/07/25
- [PULL 88/96] target/ppc/mmu_common.c: Use defines instead of numeric constants, Nicholas Piggin, 2024/07/25