Skip to content

Commit 187dc3f

Browse files
maomaomaoaoRbb666
authored andcommitted
Fix:Always use vmalle1is for kernel aspace; only use aside1is for user aspace with non-global PTE.
1 parent caca34c commit 187dc3f

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

  • libcpu/aarch64/common/include

libcpu/aarch64/common/include/tlb.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,18 @@ static inline void rt_hw_tlb_invalidate_all_local(void)
5151
static inline void rt_hw_tlb_invalidate_aspace(rt_aspace_t aspace)
5252
{
5353
#ifdef ARCH_USING_ASID
54-
__asm__ volatile(
55-
// ensure updates to pte completed
56-
"dsb nshst\n"
57-
"tlbi aside1is, %0\n"
58-
"dsb nsh\n"
59-
// after tlb in new context, refresh inst
60-
"isb\n" ::"r"(TLBI_ARG(0ul, aspace->asid))
61-
: "memory");
54+
if (aspace == &rt_kernel_space) {
55+
rt_hw_tlb_invalidate_all();
56+
} else {
57+
__asm__ volatile(
58+
// ensure updates to pte completed
59+
"dsb ishst\n"
60+
"tlbi aside1is, %0\n"
61+
"dsb ish\n"
62+
// after tlb in new context, refresh inst
63+
"isb\n" ::"r"(TLBI_ARG(0ul, aspace->asid))
64+
: "memory");
65+
}
6266
#else
6367
rt_hw_tlb_invalidate_all();
6468
#endif

0 commit comments

Comments
 (0)