riscv-sum

Introduce riscv sum bit.

Normal SUM

SUM(permit Supervisor User Memory access )是mstatus中的一个bit。

RISCV SPEC规定:

  • SUM=0,S模式下访问pte.u=0的页,会产生fault
  • SUM=1,S模式下访问pte.u=0的页,不会产生fault

所以它只影响DTLB,而不影响ITLB。

Hypervisor SUM

在Hypervisor的情况下,不光mstatus中有sum,vsstatus中也有sum。

SPEC规定:

  • As usual when V=1, two-stage address translation is applied, and the HS-level sstatus.SUM is ignored.
  • MPRV=1, MPV=1, MPP=1, 使用vsstatus.SUM

场景:

  • VS-mode (prv.vm=1, prv.enc=1), 正常load/store (hlsv=0), 使用vsstatus.sum(因为实现上调换了vsstatus/mstatus,所以实现上使用mstatus.sum)。
  • HS-mode(prv.vm=0, prv.enc=1),h load/store (hlsv=1), hstatus.spvp=1(VS-mode),使用vsstatus.sum(虽然实现上调换了vsstatus/mstatus,但因为当前vm=0,所以此时是没调换的,所以实现上仍然是用vsstatus.sum)
  • M-mode(prv.vm=0, prv.enc=3), mstatus.mprv=1, mpv=1, mpp=1(按VS-mode处理),正常load/store (hlsv=0), 使用vsstatus.sum(虽然实现上调换了vsstatus/mstatus,但因为当前vm=0,所以此时是没调用的,所以实现上仍然是用vsstatus.sum)。
  • M-mode(prv.vm=0, prv.enc=3), mstatus.mprv=1, mpv=0, mpp=1(按HS-mode处理),h load/store (hlsv=1), hstatus.spvp=1(VS-mode),使用vsstatus.sum(虽然实现上调换了vsstatus/mstatus,但因为当前vm=0,所以此时是没调换的,所以实现上仍然是用vsstatus.sum)