On Mon 29-10-18 12:59:11, Alexander Duyck wrote: > On Mon, 2018-10-29 at 19:18 +0100, Michal Hocko wrote: [...] I will try to get to your other points later. > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 89d2a2ab3fe6..048e4cc72fdf 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -5474,8 +5474,8 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, > > * Honor reservation requested by the driver for this ZONE_DEVICE > > * memory > > */ > > - if (altmap && start_pfn == altmap->base_pfn) > > - start_pfn += altmap->reserve; > > + if (pgmap && pgmap->get_memmap) > > + start_pfn = pgmap->get_memmap(pgmap, start_pfn); > > > > for (pfn = start_pfn; pfn < end_pfn; pfn++) { > > /* > > > > [...] > > The only reason why I hadn't bothered with these bits is that I was > actually trying to leave this generic since I thought I had seen other > discussions about hotplug scenerios where memory may want to change > where the vmmemmap is initialized other than just the case of > ZONE_DEVICE pages. So I was thinking at some point we may see altmap > without the pgmap. I wanted to abuse altmap to allocate struct pages from the physical range to be added. In that case I would abstract the allocation/initialization part of pgmap into a more abstract type. Something trivially to be done without affecting end users of the hotplug API. [...] > > Anyway we have gone into details while the primary problem here was that > > the hotplug lock doesn't scale AFAIR. And my question was why cannot we > > pull move_pfn_range_to_zone and what has to be done to achieve that. > > That is a fundamental thing to address first. Then you can microptimize > > on top. > > Yes, the hotplug lock was part of the original issue. However that > starts to drift into the area I believe Oscar was working on as a part > of his patch set in encapsulating the move_pfn_range_to_zone and other > calls that were contained in the hotplug lock into their own functions. Well, I would really love to keep the external API as simple as possible. That means that we need arch_add_memory/add_pages and move_pfn_range_to_zone to associate pages with a zone. The hotplug lock should be preferably hidden from callers of those two and ideally it shouldn't be a global lock. We should be good with a range lock. > The patches Andrew pushed addressed the immediate issue so that now > systems with nvdimm/DAX memory can at least initialize quick enough > that systemd doesn't refuse to mount the root file system due to a > timeout. This is about the first time you actually mention that. I have re-read the cover letter and all changelogs of patches in this serious. Unless I have missed something there is nothing about real users hitting issues out there. nvdimm is still considered a toy because there is no real HW users can play with. And hence my complains about half baked solutions rushed in just to fix a performance regression. I can certainly understand that a pressing problem might justify to rush things a bit but this should be always carefuly justified. > The next patch set I have refactors things to reduce code and > allow us to reuse some of the hotplug code for the deferred page init, > https://lore.kernel.org/lkml/20181017235043.17213.92459.stgit@localhost.localdomain/ > . After that I was planning to work on dealing with the PageReserved > flag and trying to get that sorted out. > > I was hoping to wait until after Dan's HMM patches and Oscar's changes > had been sorted before I get into any further refactor of this specific > code. Yes there is quite a lot going on here. I would really appreciate if we all sit and actually try to come up with something robust rather than hack here and there. I haven't yet seen your follow up series completely so maybe you are indeed heading the correct direction. -- Michal Hocko SUSE Labs