]> git.ipfire.org Git - thirdparty/qemu.git/commit
target/riscv/cpu_helper.c: Fix mxr bit behavior
authorIvan Klokov <ivan.klokov@syntacore.com>
Tue, 21 Nov 2023 07:17:57 +0000 (10:17 +0300)
committerMichael Tokarev <mjt@tls.msk.ru>
Wed, 29 Nov 2023 13:15:22 +0000 (16:15 +0300)
commit6f51114b0ead04e51594d367328481ae21a55bcb
treea6ccc78ef788b913b7730d8a5e562a9f0d695cc9
parent87ff608c6fd258c7f323e3a17f948e4e8d412d36
target/riscv/cpu_helper.c: Fix mxr bit behavior

According to RISCV Specification sect 9.5 on two stage translation when
V=1 the vsstatus(mstatus in QEMU's terms) field MXR, which makes
execute-only pages readable, only overrides VS-stage page protection.
Setting MXR at HS-level(mstatus_hs), however, overrides both VS-stage
and G-stage execute-only permissions.

The hypervisor extension changes the behavior of MXR\MPV\MPRV bits.
Due to RISCV Specification sect. 9.4.1 when MPRV=1, explicit memory
accesses are translated and protected, and endianness is applied, as
though the current virtualization mode were set to MPV and the current
nominal privilege mode were set to MPP. vsstatus.MXR makes readable
those pages marked executable at the VS translation stage.

Fixes: 36a18664ba ("target/riscv: Implement second stage MMU")
Signed-off-by: Ivan Klokov <ivan.klokov@syntacore.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Message-ID: <20231121071757.7178-3-ivan.klokov@syntacore.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
(cherry picked from commit 6bca4d7d1ff2b8857486c3ff31f5c6fc3e3984b4)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/riscv/cpu_helper.c