target/arm/ptw: Don't report GPC faults on stage 1 ptw as stage2 faults
commitf6415660746fcf58d6baf8dd8da77cb08adb9970
authorPeter Maydell <peter.maydell@linaro.org>
Tue, 22 Aug 2023 16:31:05 +0000 (22 17:31 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 22 Aug 2023 16:31:05 +0000 (22 17:31 +0100)
treeea2d863efe30bae4dfb40c4a223fee945fa7978c
parentc986d860398ff44c32a612b3d8dfc9f89ffe5e52
target/arm/ptw: Don't report GPC faults on stage 1 ptw as stage2 faults

In S1_ptw_translate() we set up the ARMMMUFaultInfo if the attempt to
translate the page descriptor address into a physical address fails.
This used to only be possible if we are doing a stage 2 ptw for that
descriptor address, and so the code always sets fi->stage2 and
fi->s1ptw to true.  However, with FEAT_RME it is also possible for
the lookup of the page descriptor address to fail because of a
Granule Protection Check fault.  These should not be reported as
stage 2, otherwise arm_deliver_fault() will incorrectly set
HPFAR_EL2.  Similarly the s1ptw bit should only be set for stage 2
faults on stage 1 translation table walks, i.e.  not for GPC faults.

Add a comment to the the other place where we might detect a
stage2-fault-on-stage-1-ptw, in arm_casq_ptw(), noting why we know in
that case that it must really be a stage 2 fault and not a GPC fault.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20230807141514.19075-3-peter.maydell@linaro.org
target/arm/ptw.c