> hm, maybe. But I'm not sure that touch_nmi_watchdog() will hold off a
> soft lockup warning. Maybe it will.
It should:
124static inline void touch_nmi_watchdog(void)
125{
126 arch_touch_nmi_watchdog();
127 touch_softlockup_watchdog();
128}
>
> And please let's get the above thoughts into the changlog.
OK
>
>> >
>> > I'm not sure what to suggest, really. Your changelog isn't the best:
>> > "Vlastimil Babka reported about a window issue during which when
>> > deferred pages are initialized, and the current version of on-demand
>> > initialization is finished, allocations may fail". Well... where is
>> > ths mysterious window? Without such detail it's hard for others to
>> > suggest alternative approaches.
>>
>> Here is hopefully a better description of the problem:
>>
>> Currently, during boot we preinitialize some number of struct pages to
>> satisfy all boot allocations. Even if these allocations happen when we
>> initialize the reset of deferred pages in page_alloc_init_late(). The
>> problem is that we do not know how much kernel will need, and it also
>> depends on various options.
>>
>> So, with this work, we are changing this behavior to initialize struct pages
>> on-demand, only when allocations happen.
>>
>> During boot, when we try to allocate memory, the on-demand struct page
>> initialization code takes care of it. But, once the deferred pages are
>> initializing in:
>>
>> page_alloc_init_late()
>> for_each_node_state(nid, N_MEMORY)
>> kthread_run(deferred_init_memmap())
>>
>> We cannot use on-demand initialization, as these threads resize pgdat.
>>
>> This whole thing is to take care of this time.
>>
>> My first version of on-demand deferred page initialization would simply fail
>> to allocate memory during this period of time. But, this new version waits
>> for threads to finish initializing deferred memory, and successfully perform
>> the allocation.
>>
>> Because interrupt handler would wait for pgdat resize lock.
>
> OK, thanks. Please also add to changelog.
OK, I will send an updated patch, with changelog changes.