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 <gaosong@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 {
--
2.34.1
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 <gaosong@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 <maobibo@loongson.cn>
© 2016 - 2026 Red Hat, Inc.