Eric W. Biederman wrote:The only way to ensure this will not happen is to do what we do
on x86_64 and map the new page table page into our address space
before we write to it. Assuming the page we allocate is already
mapped is simply not robust.
So you mean make alloc_bootmem make sure there's a mapping for the
returned page? That would be simple enough, though it might interact
strangely with the actual construction of the memory mappings (what if
the page alloc_bootmem just allocated for the pagetable is the page
pagetable_init is actually trying to map?).
I'm not sure about the issue with holes. I assume you mean that just
because head.S maps a chunk of memory, it isn't necessarily available
for allocation because its a hole. But does alloc_bootmem know to avoid
them anyway? Has it already parsed e820 at that point?