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)