@samitouri / QOSamiQemu / commits / 7cfaffba7c

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 <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20260417173105.1648172-6-peter.maydell@linaro.org Message-ID: <20260430093810.2762539-7-peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Peter Maydell committed Apr 30, 2026 at 10:37 UTC 7cfaffba7cb22d1f413c2d3bd2275ecfb84d20e1
1 file changed +1 -1
target/i386/helper.c
+1 -1
@@ -372,7 +372,7 @@ hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cs, vaddr addr,
372 out:
373 #endif
374 pte &= PG_ADDRESS_MASK & ~(page_size - 1);
375 - page_offset = (addr & TARGET_PAGE_MASK) & (page_size - 1);
375 + page_offset = addr & (page_size - 1);
376 return pte | page_offset;
377 }
378