arm64页表tlbi指令api接口

TLB flush操作

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 <tlbi_op> {, <Xt>}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM架构的Linux页表代码实现主要涉及到以下几个文件: 1. `arch/arm/include/asm/pgtable.h`:定义了ARM架构下的页表相关宏和数据结构,包括页表项(PTE)和页目录项(PMD)的定义。 2. `arch/arm/mm/pgtable.c`:实现了ARM架构下的页表相关函数,包括页表初始化、页表项/页目录项的创建和修改等。 3. `arch/arm/mm/mmu.c`:定义了ARM架构下的内存管理单元(MMU)的初始化和配置函数,包括页表的设置和切换等。 在ARM架构下,页表使用两级结构,包括页目录表(Page Directory Table)和页表(Page Table)。每个级别的表都有对下一级表的指针,最终指向物理内存中的页帧。 ARM架构中的页表项(PTE)和页目录项(PMD)由特定位字段组成,用于保存物理地址、标志位和其他控制信息。页表项和页目录项的结构可以在`arch/arm/include/asm/pgtable.h`中找到。 在ARM架构下,通过`pgd_offset`、`pmd_offset`、`pte_offset`等函数可以计算出对应虚拟地址在页表中的索引,并通过这些索引来获取或设置相应的页表项或页目录项。 初始化页表时,可以调用`pgd_alloc`、`pmd_alloc`、`pte_alloc`等函数来创建页表项和页目录项,并通过`pgd_populate`、`pmd_populate`等函数将物理页框与虚拟地址进行映射。 ARM架构中的MMU初始化和配置主要通过`setup_mm_for_reboot`、`init_mmu`和`__create_page_tables`等函数完成。这些函数会设置页表寄存器(TTBR0/TTBR1)和控制寄存器(CRn),从而将页表切换到对应的地址空间。 需要注意的是,不同的ARM架构版本和具体的SoC可能会有一些细微的差异,因此具体的代码分析还需要参考相关的架构文档和代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值