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]>


Reply via email to