linux/arch/arm64/include/asm/tlbflush.h
内核api:
flush_tlb_all();
flush_tlb_mm(mm);
flush_tlb_range(mm, start, end);
flush_tlb_page(vaddr, vma);
flush_tlb_kernel_range(kaddr);
指令格式: TLBI
flush_tlb_all
tlbi vmalle1is
flush_tlb_mm (切换进程上下文mm时有更新ttbr1_el1的ASID域,此时需要刷新)
tlbi asidel1is, asid
flush_tlb_range
如果大于tlb条目数1024则刷整个tlb否则
对区间内依地址循环刷 tlbi vael1is, addr 根据(asid<<48 | 虚拟地址>>12)匹配tlb缓存项
flush_tlb_page
tlbi valel1is, addr addr = asid<<48 | 虚拟地址>>12 只对最后一级pte匹配刷新
flush_kern_tlb_page