On 2025/2/28 下午5:06, Song Gao wrote:
  some tlb instructions get  the tlb_ps from tlb->misc but the
  value may has been initialized to 0,just check the tlb_ps skip
  the function and write a log.

Signed-off-by: Song Gao <gaos...@loongson.cn>
---
  target/loongarch/tcg/tlb_helper.c | 8 ++++++++
  1 file changed, 8 insertions(+)

diff --git a/target/loongarch/tcg/tlb_helper.c 
b/target/loongarch/tcg/tlb_helper.c
index a323606e5a..1c603b2903 100644
--- a/target/loongarch/tcg/tlb_helper.c
+++ b/target/loongarch/tcg/tlb_helper.c
@@ -427,7 +427,11 @@ void helper_invtlb_page_asid(CPULoongArchState *env, 
target_ulong info,
          uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
          uint64_t vpn, tlb_vppn;
          uint8_t tlb_ps, compare_shift;
+        uint8_t tlb_e = FIELD_EX64(tlb->tlb_misc, TLB_MISC, E);
+ if (!tlb_e){
+            continue;
+        }
          if (i >= LOONGARCH_STLB) {
              tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
          } else {
@@ -456,7 +460,11 @@ void helper_invtlb_page_asid_or_g(CPULoongArchState *env,
          uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
          uint64_t vpn, tlb_vppn;
          uint8_t tlb_ps, compare_shift;
+        uint8_t tlb_e = FIELD_EX64(tlb->tlb_misc, TLB_MISC, E);
+ if (!tlb_e){
+            continue;
+        }
          if (i >= LOONGARCH_STLB) {
              tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
          } else {

Reviewed-by: Bibo Mao <maob...@loongson.cn>


Reply via email to