ARM架构中的TLB失效操作与虚拟化扩展
TLBIP VALE2(Translation Lookaside Buffer Invalidate Pair by VA, Last level, EL2)是ARM架构中的一个系统指令,主要用于在EL2(Hypervisor)级别无效化TLB(转译后备缓冲器)中的条目。
简单来说,当虚拟地址映射关系发生变化时(比如页面被重新映射或权限被修改),需要告诉CPU:"嘿,你之前缓存的地址映射已经过时了,请刷新一下!" 这个指令就是干这个的。
TLB是什么? TLB是CPU中的一个缓存,用于存储虚拟地址到物理地址的映射关系,避免每次地址转换都要查页表,从而提升性能。
TLBIP VALE2是一个系统指令,需要在特权模式下执行。它使用两个64位寄存器(Xt和Xt2)作为参数,组成一个128位的操作数:
// 汇编语法示例 TLBIP VALE2, Xt, Xt2
其中,Xt和Xt2寄存器组成的128位值包含以下信息:
执行这条指令后,CPU会查找TLB中所有匹配指定虚拟地址和ASID的条目,并将它们标记为无效。
TLBIP VALE2主要在以下场景中使用:
在Linux内核中,当修改页表后,通常会调用TLB失效操作。例如在ARM64架构中:
// 类似于Linux内核中的TLB失效操作
static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end)
{
// 无效化指定地址范围的TLB条目
asm volatile(
"dsb ishst\n" // 数据同步屏障,确保之前的存储操作完成
"tlbi vale1is, %0\n" // 无效化所有核的TLB条目(内核空间)
"dsb ish\n" // 再次同步,确保TLB操作完成
"isb\n" // 指令同步屏障,确保后续指令看到更改
: : "r" (start >> 12) // 传入地址(页对齐)
);
}
在ATF中,当在不同安全状态之间切换时,需要无效化TLB:
// ATF中切换安全状态时的TLB管理
void tlbivmalle1(void)
{
/*
* 无效化EL1&0转译机制的所有TLB条目
* 这在安全状态切换时非常重要
*/
asm volatile("tlbi vmalle1\n" : : : "memory");
dsbish();
isb();
}
// 在EL2环境下使用VALE2指令
void el2_tlbivae2(isb_addr_t addr)
{
// 无效化EL2转译机制的特定TLB条目
asm volatile("tlbi vale2, %0\n" : : "r" (addr));
dsbish();
isb();
}
在OP-TEE(开源TEE实现)中,当安全世界与非安全世界交互时:
// OP-TEE中处理共享内存时的TLB管理
void tee_mmu_set_ctx(struct user_ta_ctx *utc)
{
// 设置新的上下文后,需要无效化TLB
if (utc != current_utc) {
isb();
tlbi_vmalle1(); // 无效化当前核的所有EL1 TLB条目
dsb_ish();
isb();
current_utc = utc;
}
}
// 处理阶段2转译的TLB失效(虚拟化环境)
void core_mmu_flush_tlb_el2(uintptr_t va)
{
if (va) {
// 使用VALE2指令无效化特定VA的TLB条目
asm volatile("tlbi vale2, %0" : : "r" (va >> 12));
} else {
// 无效化所有TLB条目
asm volatile("tlbi alle2" : : );
}
dsb_ish();
isb();
}
TLBIP VALE2指令的编码格式如下:
| 位域 | 字段名 | 描述 |
|---|---|---|
| [127:108] | RES0 | 保留位,必须为0 |
| [107:64] | VA[55:12] | 虚拟地址的高44位 |
| [63:48] | ASID | 地址空间标识符(在EL2启用Host扩展时使用) |
| [47:44] | TTL | 转译表级别(指示页表条目的层级) |
| [43:0] | RES0 | 保留位,必须为0 |
TLBIP VALE2NXS是TLBIP VALE2的一个变体,它在处理XS(eXecute Speculative)属性时有所不同:
这种区别在处理推测执行时非常重要,可以提高系统性能。
TLBIP VALE2指令需要以下ARM功能扩展:
如果这些扩展未实现,尝试执行该指令会导致未定义异常。
店铺二维码
客服微信二维码