From: Bibo Mao Date: Thu, 4 Sep 2025 11:11:25 +0000 (+0800) Subject: target/loongarch: Only flush one TLB entry in helper_invtlb_page_asid_or_g() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=66746876fed5eb3c04c2f958bef927df3389d42c;p=thirdparty%2Fqemu.git target/loongarch: Only flush one TLB entry in helper_invtlb_page_asid_or_g() With function helper_invtlb_page_asid_or_g(), only one TLB entry in LoongArch emulated TLB is invalidated. so with QEMU TLB, it is not necessary to flush all QEMU TLB, only flush address range specified LoongArch emulated TLB is ok. Here invalidate_tlb_entry() is called so that only QEMU TLB entry with specified address range is flushed. Signed-off-by: Bibo Mao Reviewed-by: Richard Henderson --- diff --git a/target/loongarch/tcg/tlb_helper.c b/target/loongarch/tcg/tlb_helper.c index b777f68f714..243f9456129 100644 --- a/target/loongarch/tcg/tlb_helper.c +++ b/target/loongarch/tcg/tlb_helper.c @@ -556,8 +556,7 @@ void helper_invtlb_page_asid_or_g(CPULoongArchState *env, func = tlb_match_any; tlb = loongarch_tlb_search_cb(env, addr, asid, func); if (tlb) { - tlb->tlb_misc = FIELD_DP64(tlb->tlb_misc, TLB_MISC, E, 0); - tlb_flush(env_cpu(env)); + invalidate_tlb(env, tlb - env->tlb); } }