From: Peter Maydell Date: Thu, 30 Apr 2026 09:37:51 +0000 (+0100) Subject: target/x86: Make get_phys_page_attrs_debug handle non-page-aligned addrs X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7cfaffba7cb22d1f413c2d3bd2275ecfb84d20e1;p=thirdparty%2Fqemu.git target/x86: Make get_phys_page_attrs_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 x86 this is simple: we just need to stop rounding down the input address to a TARGET_PAGE boundary when calculating the result to return. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20260417173105.1648172-6-peter.maydell@linaro.org Message-ID: <20260430093810.2762539-7-peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé --- diff --git a/target/i386/helper.c b/target/i386/helper.c index c397a6fde5a..108b02396de 100644 --- a/target/i386/helper.c +++ b/target/i386/helper.c @@ -372,7 +372,7 @@ hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr, out: #endif pte &= PG_ADDRESS_MASK & ~(page_size - 1); - page_offset = (addr & TARGET_PAGE_MASK) & (page_size - 1); + page_offset = addr & (page_size - 1); return pte | page_offset; }