[PATCH v8 1/5] mm/sparse-vmemmap: add a pgmap argument to section activation

2022-03-07 Thread Joao Martins
In support of using compound pages for devmap mappings, plumb the pgmap down to the vmemmap_populate implementation. Note that while altmap is retrievable from pgmap the memory hotplug code passes altmap without pgmap[*], so both need to be independently plumbed. So in addition to @altmap, pass @p

[PATCH v8 5/5] mm/page_alloc: reuse tail struct pages for compound devmaps

2022-03-07 Thread Joao Martins
Currently memmap_init_zone_device() ends up initializing 32768 pages when it only needs to initialize 128 given tail page reuse. That number is worse with 1GB compound pages, 262144 instead of 128. Update memmap_init_zone_device() to skip redundant initialization, detailed below. When a pgmap @vme

[PATCH v8 3/5] mm/hugetlb_vmemmap: move comment block to Documentation/vm

2022-03-07 Thread Joao Martins
In preparation for device-dax for using hugetlbfs compound page tail deduplication technique, move the comment block explanation into a common place in Documentation/vm. Cc: Muchun Song Cc: Mike Kravetz Suggested-by: Dan Williams Signed-off-by: Joao Martins Reviewed-by: Muchun Song Reviewed-b

[PATCH v8 4/5] mm/sparse-vmemmap: improve memory savings for compound devmaps

2022-03-07 Thread Joao Martins
A compound devmap is a dev_pagemap with @vmemmap_shift > 0 and it means that pages are mapped at a given huge page alignment and utilize uses compound pages as opposed to order-0 pages. Take advantage of the fact that most tail pages look the same (except the first two) to minimize struct page ove

[PATCH v8 0/5] sparse-vmemmap: memory savings for compound devmaps (device-dax)

2022-03-07 Thread Joao Martins
Changes since v7[8]: * Add Muchun's Reviewed-by in patch 4 and 5 (Muchun Song) * Add spaces between the '/' operator for readability in patch 5 (Muchun Song) * Fix rendering issues in docs (Jonathan Corbet): - Add :: for code blocks and page table diagrams (patch 3 & 4) - Rework sentence to

[PATCH v8 2/5] mm/sparse-vmemmap: refactor core of vmemmap_populate_basepages() to helper

2022-03-07 Thread Joao Martins
In preparation for describing a memmap with compound pages, move the actual pte population logic into a separate function vmemmap_populate_address() and have a new helper vmemmap_populate_range() walk through all base pages it needs to populate. While doing that, change the helper to use a pte_t*