From: Peter Maydell Date: Thu, 30 Apr 2026 09:37:48 +0000 (+0100) Subject: target/alpha: Make get_phys_page_debug handle non-page-aligned addrs X-Git-Tag: v11.1.0-rc0~122^2~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2a0b7590eed9f54a2d8e047fc96fa44cc1bbe930;p=thirdparty%2Fqemu.git target/alpha: 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. For alpha, the get_physical_address() function accepts arbitrary input addresses but may return an output rounded down to a page boundary, so in alpha_cpu_get_phys_page_debug() we OR the within-page offset into it before returning it. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20260417173105.1648172-3-peter.maydell@linaro.org Message-ID: <20260430093810.2762539-4-peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé --- diff --git a/target/alpha/helper.c b/target/alpha/helper.c index 179dc2dc7ae..af6d7847d50 100644 --- a/target/alpha/helper.c +++ b/target/alpha/helper.c @@ -301,6 +301,7 @@ hwaddr alpha_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) int prot, fail; fail = get_physical_address(cpu_env(cs), addr, 0, 0, &phys, &prot); + phys |= addr & ~TARGET_PAGE_MASK; return (fail >= 0 ? -1 : phys); }