On Wed, 09 Dec 2015 18:38:12 -0800 Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > In support of providing struct page for large persistent memory > capacities, use struct vmem_altmap to change the default policy for > allocating memory for the memmap array. The default vmemmap_populate() > allocates page table storage area from the page allocator. Given > persistent memory capacities relative to DRAM it may not be feasible to > store the memmap in 'System Memory'. Instead vmem_altmap represents > pre-allocated "device pages" to satisfy vmemmap_alloc_block_buf() > requests. > > ... > > include/linux/mm.h | 92 +++++++++++++++++++++++++++++++++++++-- mm.h is getting ridiculously huge and these additions look to be fairly standalone. Perhaps you could take a look at creating a vmem_altmap.h sometime if feeling bored? > + > +/** > + * vmem_altmap_alloc - allocate pages from the vmem_altmap reservation > + * @altmap - reserved page pool for the allocation > + * @nr_pfns - size (in pages) of the allocation > + * > + * Allocations are aligned to the size of the request > + */ > +static inline unsigned long vmem_altmap_alloc(struct vmem_altmap *altmap, > + unsigned long nr_pfns) > +{ > + unsigned long pfn = vmem_altmap_next_pfn(altmap); > + unsigned long nr_align; > + > + nr_align = 1UL << find_first_bit(&nr_pfns, BITS_PER_LONG); > + nr_align = ALIGN(pfn, nr_align) - pfn; > + > + if (nr_pfns + nr_align > vmem_altmap_nr_free(altmap)) > + return ULONG_MAX; > + altmap->alloc += nr_pfns; > + altmap->align += nr_align; > + return pfn + nr_align; > +} This look pretty large for an inline. But it has only one callsite so it doesn't matter. But if it only has one callsite, why is it in .h? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>