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

RISC-V HINVAL.GVMA 指令详解

指令手册SYSTEM R-type

Svinval/H G-stage 地址转换失效:rs1 选择 GPA>>2,rs2 选择 VMID,排序由 split-fence 序列提供。

指令语法

hinval.gvma rs1, rs2
操作数说明
rs1:提供 GPA>>2;rs1=x0 表示所有相关 guest physical address。
rs2:提供 VMID;rs2=x0 表示所有 VMID。
HFENCE/HINVAL.GVMA 的非 x0 rs1 保存 GPA>>2;所有 XLEN 位都参与该编码地址值。
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 实现为对应的完整 HFENCE。

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

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

rs1
rs2
hinval.gvma
,
G-stage 范围
rs2 直接选择 VMID;rs1≠x0 时保存 GPA>>2。

本例假定 H 与 Svinval 已实现,主机与客户使用相同 XLEN,地址有效且实现最大 ID 位数(RV32:ASID 9/VMID 7;RV64:ASID 16/VMID 14)。rs2 高于 ID 位数的位被忽略;软件应清零保留高位。实现可执行更宽范围的 fence/失效。GPA 输入右移两位后放入 rs1,不再对寄存器值移位。

31..25
24..20
19..15
14..12
11..7
6..0
0110011
funct7
01011
rs2/VMID
01010
rs1/GPA>>2
000
funct3
00000
rd=x0
1110011
SYSTEM
Hypervisor 地址转换状态
instruction
0x66B50073
opcode
1110011 -> SYSTEM
funct7
0110011 -> HINVAL.GVMA
rs1
a0(x10) -> GPA>>2 0x0000000020000400
rs2
a1(x11)=0x0000000000000005 -> VMID 5
scope
a0(x10)=GPA>>2 0x0000000020000400 (GPA 0x0000000080001000); a1(x11)=0x0000000000000005 -> VMID 5
permission
HS;TVM=0
invalidate
尚未执行 fence/失效效果
complete
尚未执行 fence/失效效果

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

快速理解与检索要点

HINVAL.GVMA 是 split-fence 序列中的 G-stage 失效动作:rs1 使用 GPA>>2,rs2 使用 VMID;本指令单独不保证完整排序。

funct7=0110011、funct3=000、rd=x0、opcode=1110011 识别 HINVAL.GVMA。
HINVAL.GVMA 的范围选择对应 HFENCE.GVMA:rs1≠x0为 GPA>>2,rs2≠x0为 VMID。
典型 split-fence 关系是 SFENCE.W.INVAL -> 一条或多条 HINVAL/SINVAL -> SFENCE.INVAL.IR。

常见使用场景

G-stage 失效序列

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

使用前检查清单

语法检查
  • 确认汇编操作数只有 rs1、rs2:该 SYSTEM R-type 指令没有 rd 写回或立即数字段。
  • 确认 rs1/rs2 的作用域:rs1=x0 选择全部 guest physical address,rs2=x0 选择全部 VMID。
语义检查
  • 确认仅在允许的特权状态执行;若发生 illegal-instruction 或 virtual-instruction 异常,不能把失效效果当作已完成。
  • 确认非 x0 的 rs1 已保存 GPA>>2;不要再对寄存器值右移两位。

容易混淆 / 常见误区

rs1≠x0 时保存 GPA>>2;不要再对寄存器值右移。
M-mode 可执行;HS-mode 需 mstatus.TVM=0。V=1 时为 virtual-instruction 异常;U-mode 为 illegal-instruction 异常。
作用于本 hart;实现可覆盖更宽范围,不能当作普通数据 cache flush。
rs2≠x0 时,保留高位应清零;实现忽略高于已实现 ID 位数的位。
需要 H 与 Svinval;SFENCE.W.INVAL → HINVAL → SFENCE.INVAL.IR 按序提供对应 HFENCE 的排序保证。

常见问题

HINVAL.GVMA 自己完成排序吗?

单独不保证完整排序。SFENCE.W.INVAL 和 SFENCE.INVAL.IR 提供序列排序边界;实现也可使用完整 HFENCE。

HINVAL.GVMA 的 rs1 和 HINVAL.VVMA 一样吗?

不同。HINVAL.GVMA 的 rs1≠x0时是 GPA>>2;HINVAL.VVMA 的 rs1 是 guest virtual address。