Skip to content

Commit cbf052d

Browse files
committed
tlb flush support smp
Signed-off-by: Weikang Guo <guoweikang@kylinos.cn>
1 parent 4594a76 commit cbf052d

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

page_table_multiarch/src/arch/aarch64.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ impl PagingMetaData for A64PagingMetaData {
2323

2424
#[inline]
2525
fn flush_tlb(vaddr: Option<VirtAddr>) {
26+
// make sure all previous page table writes are visible
2627
unsafe {
2728
if let Some(vaddr) = vaddr {
2829
// TLB Invalidate by VA, All ASID, EL1, Inner Shareable
2930
const VA_MASK: usize = (1 << 44) - 1; // VA[55:12] => bits[43:0]
30-
asm!("tlbi vaae1is, {}; dsb sy; isb", in(reg) ((vaddr.as_usize() >> 12) & VA_MASK))
31+
asm!("dsb ishst; tlbi vaae1is, {}; dsb ish; isb", in(reg) ((vaddr.as_usize() >> 12) & VA_MASK))
3132
} else {
3233
// TLB Invalidate by VMID, All at stage 1, EL1
33-
asm!("tlbi vmalle1; dsb sy; isb")
34+
asm!("dsb ishst; tlbi vmalle1is; dsb ish; isb")
3435
}
3536
}
3637
}

0 commit comments

Comments
 (0)