get_phys_addr_disabled() is called from only one function, get_phys_addr_nogpc(), and from two locations within it.
The first call to get_phys_addr_disabled() occurs when mmu_idx is one of the following: ARMMMUIdx_Phys_S, ARMMMUIdx_Phys_NS, ARMMMUIdx_Phys_Root, or ARMMMUIdx_Phys_Realm. So, handling ARMMMUIdx_Stage2 or ARMMMUIdx_Stage2_S is not required in get_phys_addr_disabled() for this case. The second call to get_phys_addr_disabled(), with mmu_idx == ARMMMUIdx_Stage2 (or ARMMMUIdx_Stage2_S), only would occur if regime_translation_disabled() returns true for these mmu indexes. However, mmu_idx == ARMMMUIdx_Stage2 (or ARMMMUIdx_Stage2_S) can only occur if get_phys_addr_twostage() was called, since it's the only place where ptw->in_mmu_idx is set to ARMMMUIdx_Stage2 (or ARMMMUIdx_Stage2_S) and that only happens if regime_translation_disabled() returns false. Therefore, at this second call site, get_phys_addr_disabled() is never invoked with mmu_idx == ARMMMUIdx_Stage2 or ARMMMUIdx_Stage2_S. Hence, since get_phys_addr_disabled() can never be called with mmu_idx == ARMMMUIdx_Stage2 or ARMMMUIdx_Stage2_S, removed these two cases from this function. CI: https://gitlab.com/gusbromero/qemu/-/pipelines/2335353022 The failure in the "migration-compat-aarch64" test is also observed on "master", so the chance it's caused by this cleanup is very low. Also, it's a test marked as "allowed to fail". Signed-off-by: Gustavo Romero <[email protected]> --- target/arm/ptw.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 8b8dc09e72..b8a3150f14 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -3449,8 +3449,6 @@ static bool get_phys_addr_disabled(CPUARMState *env, int r_el; switch (mmu_idx) { - case ARMMMUIdx_Stage2: - case ARMMMUIdx_Stage2_S: case ARMMMUIdx_Phys_S: case ARMMMUIdx_Phys_NS: case ARMMMUIdx_Phys_Root: -- 2.34.1
