numa_maps collects per-node page counts in the page-table walkers and emits them in show_numa_map. All three filtered by N_MEMORY, so pages on N_MEMORY_PRIVATE nodes were never gathered/printed.
Accept N_MEMORY_PRIVATE pages in both walkers and emit private nodes in show_numa_map, so private-node mappings are visible in numa_maps. Signed-off-by: Gregory Price <[email protected]> --- fs/proc/task_mmu.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 817e3e0f91943..e116cd5f157b9 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -3389,7 +3389,8 @@ static struct page *can_gather_numa_stats(pte_t pte, struct vm_area_struct *vma, return NULL; nid = page_to_nid(page); - if (!node_isset(nid, node_states[N_MEMORY])) + if (!node_isset(nid, node_states[N_MEMORY]) && + !node_isset(nid, node_states[N_MEMORY_PRIVATE])) return NULL; return page; @@ -3414,7 +3415,8 @@ static struct page *can_gather_numa_stats_pmd(pmd_t pmd, return NULL; nid = page_to_nid(page); - if (!node_isset(nid, node_states[N_MEMORY])) + if (!node_isset(nid, node_states[N_MEMORY]) && + !node_isset(nid, node_states[N_MEMORY_PRIVATE])) return NULL; return page; @@ -3602,6 +3604,10 @@ static int show_numa_map(struct seq_file *m, void *v) if (md->node[nid]) seq_printf(m, " N%d=%lu", nid, md->node[nid]); + for_each_node_state(nid, N_MEMORY_PRIVATE) + if (md->node[nid]) + seq_printf(m, " N%d=%lu", nid, md->node[nid]); + seq_printf(m, " kernelpagesize_kB=%lu", vma_kernel_pagesize(vma) >> 10); out: seq_putc(m, '\n'); -- 2.53.0-Meta

