target/loongarch: fix 'make check-functional' failed
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> Reviewed-by: Bibo Mao <maobibo@loongson.cn> Message-Id: <20250305063311.830674-2-gaosong@loongson.cn>
This commit is contained in:
parent
e8a0110293
commit
089fa3d730
@ -123,7 +123,11 @@ static void invalidate_tlb_entry(CPULoongArchState *env, int index)
|
|||||||
uint8_t tlb_v0 = FIELD_EX64(tlb->tlb_entry0, TLBENTRY, V);
|
uint8_t tlb_v0 = FIELD_EX64(tlb->tlb_entry0, TLBENTRY, V);
|
||||||
uint8_t tlb_v1 = FIELD_EX64(tlb->tlb_entry1, TLBENTRY, V);
|
uint8_t tlb_v1 = FIELD_EX64(tlb->tlb_entry1, TLBENTRY, V);
|
||||||
uint64_t tlb_vppn = FIELD_EX64(tlb->tlb_misc, TLB_MISC, VPPN);
|
uint64_t tlb_vppn = FIELD_EX64(tlb->tlb_misc, TLB_MISC, VPPN);
|
||||||
|
uint8_t tlb_e = FIELD_EX64(tlb->tlb_misc, TLB_MISC, E);
|
||||||
|
|
||||||
|
if (!tlb_e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (index >= LOONGARCH_STLB) {
|
if (index >= LOONGARCH_STLB) {
|
||||||
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
||||||
} else {
|
} else {
|
||||||
@ -427,7 +431,11 @@ void helper_invtlb_page_asid(CPULoongArchState *env, target_ulong info,
|
|||||||
uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
|
uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
|
||||||
uint64_t vpn, tlb_vppn;
|
uint64_t vpn, tlb_vppn;
|
||||||
uint8_t tlb_ps, compare_shift;
|
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) {
|
if (i >= LOONGARCH_STLB) {
|
||||||
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
||||||
} else {
|
} else {
|
||||||
@ -456,7 +464,11 @@ void helper_invtlb_page_asid_or_g(CPULoongArchState *env,
|
|||||||
uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
|
uint16_t tlb_asid = FIELD_EX64(tlb->tlb_misc, TLB_MISC, ASID);
|
||||||
uint64_t vpn, tlb_vppn;
|
uint64_t vpn, tlb_vppn;
|
||||||
uint8_t tlb_ps, compare_shift;
|
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) {
|
if (i >= LOONGARCH_STLB) {
|
||||||
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
tlb_ps = FIELD_EX64(tlb->tlb_misc, TLB_MISC, PS);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user