On Fri, Jul 26, 2019 at 10:34:47AM +0200, David Hildenbrand wrote: > > Want to add 384MB (3 sections, 3 memory-blocks) > > e.g: > > > > add_memory(0x1000, size_memory_block); > > add_memory(0x2000, size_memory_block); > > add_memory(0x3000, size_memory_block); > > > > [memblock#0 ] > > [0 - 511 pfns ] - vmemmaps for section#0 > > [512 - 32767 pfns ] - normal memory > > > > [memblock#1 ] > > [32768 - 33279 pfns] - vmemmaps for section#1 > > [33280 - 65535 pfns] - normal memory > > > > [memblock#2 ] > > [65536 - 66047 pfns] - vmemmap for section#2 > > [66048 - 98304 pfns] - normal memory > > I wouldn't even care about documenting this right now. We have no user > so far, so spending 50% of the description on this topic isn't really > needed IMHO :) Fair enough, I could drop it. Was just trying to be extra clear. > > > > > or > > add_memory(0x1000, size_memory_block * 3); > > > > [memblock #0 ] > > [0 - 1533 pfns ] - vmemmap for section#{0-2} > > [1534 - 98304 pfns] - normal memory > > > > When using larger memory blocks (1GB or 2GB), the principle is the same. > > > > Of course, per whole-range granularity is nicer when it comes to have a large > > contigous area, while per memory-block granularity allows us to have flexibility > > when removing the memory. > > E.g., in my virtio-mem I am currently adding all memory blocks > separately either way (to guranatee that remove_memory() works cleanly - > see __release_memory_resource()), and to control the amount of > not-offlined memory blocks (e.g., to make user space is actually > onlining them). As it's just a prototype, this might change of course in > the future. What is virtio-mem for? Did it that raised from a need? Is it something you could try this patch on? > > /* > > + * We want memmap (struct page array) to be allocated from the hotadded range. > > + * To do so, there are two possible ways depending on what the caller wants. > > + * 1) Allocate memmap pages whole hot-added range. > > + * Here the caller will only call any add_memory() variant with the whole > > + * memory address. > > + * 2) Allocate memmap pages per memblock > > + * Here, the caller will call any add_memory() variant per memblock > > + * granularity. > > + * The former implies that we will use the beginning of the hot-added range > > + * to store the memmap pages of the whole range, while the latter implies > > + * that we will use the beginning of each memblock to store its own memmap > > + * pages. > > Can you make this documentation only state how MHP_MEMMAP_ON_MEMORY > works? (IOW, shrink it heavily to what we actually implement) Sure. > Apart from the requested description/documentation changes > > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> Thanks for having a look David ;-) > > -- > > Thanks, > > David / dhildenb -- Oscar Salvador SUSE L3