On 30.07.2018 13:30, Michal Hocko wrote: > On Fri 27-07-18 18:54:54, David Hildenbrand wrote: >> Right now, struct pages are inititalized when memory is onlined, not >> when it is added (since commit d0dc12e86b31 ("mm/memory_hotplug: optimize >> memory hotplug")). >> >> remove_memory() will call arch_remove_memory(). Here, we usually access >> the struct page to get the zone of the pages. >> >> So effectively, we access stale struct pages in case we remove memory that >> was never onlined. So let's simply inititalize them earlier, when the >> memory is added. We only have to take care of updating the zone once we >> know it. We can use a dummy zone for that purpose. > > I have considered something like this when I was reworking memory > hotplug to not associate struct pages with zone before onlining and I > considered this to be rather fragile. I would really not like to get > back to that again if possible. > >> So effectively, all pages will already be initialized and set to >> reserved after memory was added but before it was onlined (and even the >> memblock is added). We only inititalize pages once, to not degrade >> performance. > > To be honest, I would rather see d0dc12e86b31 reverted. It is late in > the release cycle and if the patch is buggy then it should be reverted > rather than worked around. I found the optimization not really > convincing back then and this is still the case TBH. > If I am not wrong, that's already broken in 4.17, no? What about that? If we don't care about that, then I agree to reverting said commit for v4.18. -- Thanks, David / dhildenb