Re: [PATCH] x86, mm: Reserver some memory for bootmem allocator for NO_BOOTMEM

From: Thomas Gleixner
Date: Thu Aug 30 2018 - 09:25:47 EST


On Thu, 30 Aug 2018, Feng Tang wrote:
> On Thu, Aug 30, 2018 at 03:05:31PM +0200, Thomas Gleixner wrote:
> > > Those [_text, __bss_stop] is not able to be used by alloc_bootmem(). And I
> > > only got this patch, and really appreciate any good suggestions.
> >
> > And why do you want to use bootmem in the first place? If boot mem is going
> > away, why are you not fixing the early console crap to NOT use bootmem at
> > all?
>
> The earlycon need use fixmap to map the mmio register, while fixmap will
> need a new page for page table if the pmd/pte is not already their, as shown
> in the commit log:
>
> panic+0xd2/0x220
> __alloc_bootmem+0x31/0x34
> spp_getpage+0x60/0x8a
> fill_pte+0x71/0x130
> __set_pte_vaddr+0x1d/0x50
> set_pte_vaddr+0x3c/0x60
> __native_set_fixmap+0x23/0x30
> native_set_fixmap+0x30/0x40
> setup_earlycon+0x1e0/0x32f
> param_setup_earlycon+0x13/0x22
> do_early_param+0x5b/0x90
> parse_args+0x1f7/0x300
> parse_early_options+0x24/0x28
> parse_early_param+0x65/0x73
> setup_arch+0x31e/0x9f1
> start_kernel+0x58/0x44e
>
> inside the spp_getpage():
>
> if (after_bootmem)
> ptr = (void *) get_zeroed_page(GFP_ATOMIC);
> else
> ptr = alloc_bootmem_pages(PAGE_SIZE);

And where is the problem? We know that we need the fixmap during early boot
anyway, so allocating the PTE page statically and setting it up early
enough is not really rocket science. No allocator required.

Thanks,

tglx