On Wed, Oct 16, 2024 at 12:59:13PM GMT, Yosry Ahmed wrote: > On Wed, Oct 16, 2024 at 11:39 AM Shakeel Butt <shakeel.butt@xxxxxxxxx> wrote: > > > > Ccing couple more folks who are doing similar work (ASI, guest_memfd) > > > > Folks, what is the generic way to check if a given mapping has folios > > unmapped from kernel address space? > > I suppose you mean specifically if a folio is not mapped in the direct > map, because a folio can also be mapped in other regions of the kernel > address space (e.g. vmalloc). > > From my perspective of working on ASI on the x86 side, I think > lookup_address() is > the right API to use. It returns a PTE and you can check if it is > present. > > Based on that, I would say that the generic way is perhaps > kernel_page_present(), which does the above on x86, not sure about > other architectures. It seems like kernel_page_present() always > returns true with !CONFIG_ARCH_HAS_SET_DIRECT_MAP, which assumes that > unmapping folios from the direct map uses set_direct_map_*(). > > For secretmem, it seems like set_direct_map_*() is indeed the method > used to unmap folios. I am not sure if the same stands for > guest_memfd, but I don't see why not. > > ASI does not use set_direct_map_*(), but it doesn't matter in this > context, read below if you care about the reasoning. > > ASI does not unmap folios from the direct map in the kernel address > space, but it creates a new "restricted" address space that has the > folios unmapped from the direct map by default. However, I don't think > this is relevant here. IIUC, the purpose of this patch is to check if > the folio is accessible by the kernel, which should be true even in > the ASI restricted address space, because ASI will just transparently > switch to the unrestricted kernel address space where the folio is > mapped if needed. > > I hope this helps. > Thanks a lot. This is really helpful.