CSR 位字段

RISC-V mtval2 CSR 寄存器详解

地址 0x34B特权级 M模式访问 读写 / MXLENMachine 状态、trap 与中断 CSR

机器第二陷阱值 CSR,由 Hypervisor 扩展加入;guest-page-fault 进入 M 模式时保存 guest physical address 右移 2 位后的值或 0。

字段映射

按 bit 字段理解 mtval2

1 个关键字段
MXLEN-1:0

VALUE

读写

完整 mtval2 值。guest-page-fault 时,该值可为 guest physical address 右移 2 位;无信息时为 0。该 CSR 是 WARL,必须能保存 0,对其他 GPA>>2 值只需能表示任意子集。

这个字段控制什么

  • - 完整 mtval2 值。guest-page-fault 时,该值可为 guest physical address 右移 2 位;无信息时为 0。该 CSR 是 WARL,必须能保存 0,对其他 GPA>>2 值只需能表示任意子集。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

官方依据与检索要点

mtval2 是 Hypervisor 扩展加入的 MXLEN 位 M 模式读写 CSR,地址 0x34B。guest-page-fault 进入 M 模式时,它保存 GPA>>2 或 0;该 CSR 是 WARL,且除 0 外只要求支持任意子集。

官方 CSR 表列出 mtval2 为 0x34B、MRW,描述为 Machine second trap value。
Hypervisor 扩展加入 mtval2 和 mtinst;Ssdbltrp 也要求实现 mtval2。
mtval2 是 WARL,必须保存 0;除 0 外只需能表示 GPA>>2 值的任意子集,页面不把它描述为完整 GPA。

读这个 CSR 时先看什么

  • - mtval2 由 Hypervisor 扩展加入;Ssdbltrp 扩展也要求实现该 CSR。
  • - guest-page-fault 进入 M 模式时,mtval2 保存 guest physical address 右移 2 位后的值或 0;通常其他陷阱写 0,但 Ssdbltrp 双陷阱会把原本应写入 mcause 的值写入 mtval2,未来标准或扩展也可重新定义其他用途。
  • - 解释 mtval2 时应同时查看 mcause、mtval 和 mtinst,以判断陷阱类型、原始虚拟地址和是否涉及隐式 VS 阶段访问。

写入前的风险检查

  • - mtval2 是 WARL;除 0 以外,只保证实现可表示任意子集的 GPA>>2 值,其他写入可能被规范化。
  • - 不要把 mtval2 当作完整 guest physical address;官方格式省略了低 2 位。

放回真实流程里理解

1

guest-page-fault 进入 M 模式后,软件先用 mcause 确认陷阱原因。

2

读取 mtval 取得出错虚拟地址,并读取 mtval2 取得 GPA>>2(若实现提供)。

3

如 mtinst 非零,结合其合法值判断是否为 VS 阶段地址转换的隐式访存。

常见问题

mtval2 可以在任意特权级访问吗?

不能。官方 CSR 表列出 mtval2 为地址 0x34B 的 MRW CSR,最低访问级为 M 模式。权限不足或访问未实现 CSR 时会触发非法指令异常。

写 mtval2 时最容易忽略什么?

最容易忽略低 2 位未保存在 mtval2 中。mtval2 保存的是 guest physical address 右移 2 位后的值,而不是完整 GPA。