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

RISC-V HINVAL.VVMA 指令详解

指令手册R-type

Svinval/H VS-stage 地址转换失效:rs1 选择 guest virtual address,rs2 选择 ASID,当前 VMID 来自虚拟化上下文。

指令语法

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

指令行为说明

HINVAL.VVMA 是 Hypervisor + Svinval 的 VS-stage 地址转换缓存失效指令。它失效与 rs1 指定 guest virtual address 和 rs2 指定 ASID 匹配的 VS-stage 转换缓存条目;rs1=x0 表示所有 guest virtual addresses,rs2=x0 表示所有 ASID。当前 VMID 来自虚拟化上下文而不是 rs2。它本身只执行失效;排序由 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 分离围栏提供。

HINVAL.VVMA 指令解析与 Hypervisor 地址转换动画

Svinval/H VS-stage 地址转换失效:展示 SYSTEM 编码、rs1/rs2 范围选择、Svinval/H 失效,不模拟 TLB 或 cache 实现。

rs1
rs2
hinval.vvma
,
31..25
24..20
19..15
14..12
11..7
6..0
0010011
funct7
01011
rs2/ASID
01010
rs1/GVA
000
funct3
00000
rd=x0
1110011
SYSTEM
Hypervisor 地址转换状态
instruction
0x26B50073
opcode
1110011 -> SYSTEM
funct7
0010011 -> HINVAL.VVMA
rs1
a0(x10) -> GVA 0x0000000040001000
rs2
a1(x11) -> ASID 3
VMID
current VMID 7 from virtualization context
scope
a0(x10)=0x0000000040001000; a1(x11)=ASID 3, current VMID=7
invalidate
invalidate matching VS-stage translation-cache entries
complete
selected VS-stage translation-cache entries invalidated

该动画只展示官方特权架构定义的本 hart 地址转换 fence/失效语义;不展示 OS shootdown 协议、TLB 结构、cache 刷新、页表遍历延迟或平台中断机制。

快速理解与检索要点

HINVAL.VVMA 是 split-fence 序列中的 VS-stage 失效动作:rs1 选择 guest virtual address,rs2 选择 ASID,当前 VMID 不来自 rs2。

funct7=0010011、funct3=000、rd=x0、opcode=1110011 识别 HINVAL.VVMA。
HINVAL.VVMA 的范围选择对应 HFENCE.VVMA:rs1 为 guest virtual address,rs2 为 ASID。
典型 split-fence 关系是 SFENCE.W.INVAL -> 一条或多条 HINVAL/SINVAL -> SFENCE.INVAL.IR。

常见使用场景

Svinval 序列

结合 «hinval.vvma a1, a2 # a1 = guest virtual address; a2 = ASID» 等实际代码理解该场景。

VS-stage 失效

结合 «hinval.vvma a1, a2 # a1 = guest virtual address; a2 = ASID» 等实际代码理解该场景。

虚拟化 TLB shootdown

结合 «hinval.vvma a1, a2 # a1 = guest virtual address; a2 = ASID» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

需要 H 加 Svinval;权限/异常行为与 HFENCE.VVMA 对应。
rs1 指定 guest virtual address;不要和 HINVAL.GVMA 的 GPA>>2 混淆。
rs2 指定 ASID,不是 VMID;当前 VMID 来自虚拟化上下文。
它只执行失效,不提供完整排序;需要 SFENCE.W.INVAL 和 SFENCE.INVAL.IR 建立分离围栏序列。
不要把 HINVAL.VVMA 理解为数据 cache flush 或具体 TLB entry walk。

常见问题

HINVAL.VVMA 的 rs2 是 VMID 吗?

不是。rs2 是 ASID;当前 VMID 来自虚拟化上下文。

HINVAL.VVMA 和 HFENCE.VVMA 有什么区别?

HINVAL.VVMA 执行 VS-stage 失效,排序由 split-fence 序列提供;HFENCE.VVMA 是完整的 VS-stage 地址转换围栏。