On 28/3/25 18:55, Richard Henderson wrote:
When update_pagemask was split from helper_mtc0_pagemask,
we failed to actually write to the new parameter but continue
to write to env->CP0_PageMask. Thus the use within
page_table_walk_refill modifies cpu state and not the local
variable as expected.
Simplify by renaming to compute_pagemask and returning the
value directly. No need for either env or pointer return.
Fixes: 074cfcb4dae ("target/mips: Implement hardware page table walker for
MIPS32")
Signed-off-by: Richard Henderson <[email protected]>
---
target/mips/tcg/tcg-internal.h | 2 +-
target/mips/tcg/system/cp0_helper.c | 10 +++++-----
target/mips/tcg/system/tlb_helper.c | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
void helper_mtc0_pagegrain(CPUMIPSState *env, target_ulong arg1)
diff --git a/target/mips/tcg/system/tlb_helper.c
b/target/mips/tcg/system/tlb_helper.c
index 123639fa18..df80301a41 100644
--- a/target/mips/tcg/system/tlb_helper.c
+++ b/target/mips/tcg/system/tlb_helper.c
@@ -876,7 +876,7 @@ refill:
}
}
pw_pagemask = m >> TARGET_PAGE_BITS;
- update_pagemask(env, pw_pagemask << CP0PM_MASK, &pw_pagemask);
+ pw_pagemask = compute_pagemask(pw_pagemask << CP0PM_MASK);
Nice catch.
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>