首页/指令库/HINVAL-GVMA
HINVAL.GVMA

RISC-V HINVAL.GVMA 指令详解

指令手册R-type

Svinval/H 的 G-stage 失效指令:按 GPA>>2 与 VMID 失效,排序由分离围栏提供。

指令语法

hinval.gvma rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
HSvinval内存管理

指令行为说明

HINVAL.GVMA 是 Hypervisor + Svinval 扩展的 G-stage 地址转换缓存失效指令。它失效与 rs1/rs2 匹配的 G-stage 转换缓存条目;rs1 非 x0 时包含 guest physical address 右移 2 位后的值(GPA>>2),rs2 非 x0 时指定 VMID。rs1=x0 表示所有 guest physical addresses,rs2=x0 表示所有 VMID。它本身只执行失效,排序由 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 提供。

快速理解与检索要点

HINVAL.GVMA 是 Svinval/H 的 G-stage 地址转换失效,只执行失效;排序由 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 分离围栏提供。

HINVAL.GVMA 沿用 HFENCE.GVMA 的地址选择语义:rs1 非 x0 表示右移 2 位的 guest physical address。
该指令执行失效而不是完整围栏;分离围栏序列负责排序。

常见使用场景

内存管理

结合 «hinval.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID» 等实际代码理解该场景。

虚拟化

结合 «hinval.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID» 等实际代码理解该场景。

TLB shootdown

结合 «hinval.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

需要 H 加 Svinval,权限/异常行为与 HFENCE.GVMA 对应。
rs1 非 x0 时包含 GPA>>2,不是 guest virtual address,也不是未移位 GPA;rs2 指定 VMID。
VS-mode 或 VU-mode 执行会触发 virtual-instruction 异常。
与 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 配合使用以获得分离围栏排序。

常见问题

它是用户态普通指令吗?

不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。

它是否替代普通内存 fence?

不能简单替代。地址转换、指令获取和数据内存排序分别有不同的 fence/失效指令。