@samitouri / QOSamiQemu / commits / 2960429541

target/ppc: Make get_phys_page_debug handle non-page-aligned addrs

Currently our implementations of SysemuCPUOps::get_phys_page_debug and SysemuCPUOps::get_phys_page_attrs_debug are a mix of "accepts a non-page-aligned virtual address and returns the corresponding non-page-aligned physical address" and "only returns a page-aligned physical address". This is awkward for callsites, which in practice all want the physical address for an arbitrary virtual address and have to work around the possibility of getting a page-aligned address, and it doesn't account for protection being possibly on a sub-page-sized granularity. We want to standardize on the implementation having to handle non-page-aligned addresses. The ppc_xlate() function can accept a non-page-aligned input but may return a page-aligned output; we take the simple approach of ORing the page offset back into the result address after calling it. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20260417173105.1648172-8-peter.maydell@linaro.org Reviewed-by: Glenn Miles <milesg@linux.ibm.com> Message-ID: <20260430093810.2762539-9-peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Peter Maydell committed Apr 30, 2026 at 10:37 UTC 2960429541f1ea844117366f349f30c5283ba27a
1 file changed +1 -1
target/ppc/mmu_common.c
+1 -1
@@ -863,7 +863,7 @@ hwaddr ppc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
863 ppc_env_mmu_index(&cpu->env, false), false) ||
864 ppc_xlate(cpu, addr, MMU_INST_FETCH, &raddr, &s, &p,
865 ppc_env_mmu_index(&cpu->env, true), false)) {
866 - return raddr & TARGET_PAGE_MASK;
866 + return raddr | (addr & ~TARGET_PAGE_MASK);
867 }
868 return -1;
869 }