Hi Mike On Thu, Nov 23, 2023 at 12:18:54PM +0200, Mike Rapoport wrote: > Hi Serge, > > On Wed, Nov 22, 2023 at 09:24:03PM +0300, Serge Semin wrote: > > Besides of the already described reasons the pages backended memory holes > > might be persistent due to having memory mapped IO spaces behind those > > ranges in the framework of flatmem kernel config. Add such note to the > > init_unavailable_range() method kdoc in order to point out to one more > > reason of having the function executed for such regions. > > > > Signed-off-by: Serge Semin <fancer.lancer@xxxxxxxxx> > > > > --- > > > > Please let me know if the IO-space pages must be initialized somehow > > differently rather relying on free_area_init() executing the > > init_unavailable_range() method. > > Maybe I'm missing something, but why do you need struct pages in the > IO space? In my case at the very least that's due to having a SRAM device available in the middle of the MMIO-space. The region is getting mapped using the ioremap_wc() method (Uncached Write-Combine CA), which eventually is converted to calling get_vm_area() and ioremap_page_range() (see ioremap_prot() function on MIPS), which in its turn use the page structs for mapping. Another similar case is using ioremap_wc() in the PCIe outbound ATU space mapping of the graphic/video cards framebuffers. In general having the pages array defined for the IO-memory is required for mapping the IO-space other than just uncached (my sram case for example) or, for instance, with special access attribute for the user-space (if I am not missing something in a way VM works in that case). -Serge(y) > > > --- > > mm/mm_init.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/mm/mm_init.c b/mm/mm_init.c > > index 077bfe393b5e..3fa33e2d32ba 100644 > > --- a/mm/mm_init.c > > +++ b/mm/mm_init.c > > @@ -796,6 +796,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn) > > * - physical memory bank size is not necessarily the exact multiple of the > > * arbitrary section size > > * - early reserved memory may not be listed in memblock.memory > > + * - memory mapped IO space > > * - memory layouts defined with memmap= kernel parameter may not align > > * nicely with memmap sections > > * > > -- > > 2.42.1 > > > > -- > Sincerely yours, > Mike. >