Hello Marc, On 05.10.24 12:31, Marc Zyngier wrote: > On Fri, 04 Oct 2024 20:50:18 +0100, > Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> wrote: >> With readl/writel implemented in assembly, I get beyond that point, but >> now I get a data abort running an DC IVAC instruction on address 0x1000, >> where the cfi-flash is located. This instruction is part of a routine >> to remap the cfi-flash to start a page later, so the zero page can be >> mapped faulting. [snip] >> Any idea what this is about? > > IIRC, the QEMU flash is implemented as a read-only memslot. A data > cache invalidation is a *write*, as it can be (and is) upgraded to a > clean+invalidate by the HW. So it's a write, even if there are no dirty cache lines? > KVM cannot satisfy the write, for obvious reasons, and tells the guest > to bugger off (__gfn_to_pfn_memslot() returns KVM_PFN_ERR_RO_FAULT, > which satisfies is_error_noslot_pfn() -- a slight oddity, but hey, why > not). > > In the end, you get an exception. We could relax this by > special-casing CMOs to RO memslots, but this doesn't look great. > > The real question is: what are you trying to achieve with this? barebox sets up the MMU, but tries to keep a 1:1 mapping. On Virt, we want to map the zero page faulting, but still have access to the first block of the cfi-flash. Therefore, barebox will map the cfi-flash one page later (virt 0x1000,0x2000,... -> phys 0x0000,0x1000,...) and so on, so the first page can be mapped faulting. The routine[1] that does this remapping invalidates the virtual address range, because the attributes may change[2]. This invalidate also happens for cfi-flash, but we should never encounter dirty cache lines there as the remap is done before driver probe. Can you advise what should be done differently? [1]: https://elixir.bootlin.com/barebox/v2024.09.0/source/arch/arm/cpu/mmu_64.c#L193 [2]: https://lore.kernel.org/barebox/20230526063354.1145474-4-a.fatoum@xxxxxxxxxxxxxx/ Thanks, Ahmad > > M. > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |