From 9027c8ec431fed345a0ffe26c673fafe266de3b2 Mon Sep 17 00:00:00 2001 From: Kalesh Singh Date: Wed, 9 Apr 2025 23:37:28 -0700 Subject: [PATCH] ANDROID: 16K: Add VMA padding size to smaps output Instead of printing ?? for unexpected vm_flags due to vm padding flag bits; print the size of the padding in kB if any. Example output: 7ff6306c2000-7ff6306c3000 r--p 00000000 fe:09 1912 /system/lib64/bootstrap/libdl.so Size: 4 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Rss: 4 kB Pss: 0 kB Pss_Dirty: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB KSM: 0 kB LazyFree: 0 kB AnonHugePages: 0 kB ShmemPmdMapped: 0 kB FilePmdMapped: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB Locked: 0 kB THPeligible: 0 VmFlags: rd mr mw me pad=12kB // <======== 7ff6306c3000-7ff6306c6000 ---p 00000000 00:00 0 [page size compat] Size: 12 kB // <======== KernelPageSize: 4 kB MMUPageSize: 4 kB Rss: 0 kB Pss: 0 kB Pss_Dirty: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB KSM: 0 kB LazyFree: 0 kB AnonHugePages: 0 kB ShmemPmdMapped: 0 kB FilePmdMapped: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB Locked: 0 kB THPeligible: 0 VmFlags: mr mw me Bug: 383389169 Bug: 409239984 Bug: 404710273 Bug: 394468578 Change-Id: I4e996f207c9eb980d1a108418c506542722e7265 Signed-off-by: Kalesh Singh --- fs/proc/task_mmu.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index fdf7e8362132..0a167e6ad0bf 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1007,15 +1007,21 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma) [ilog2(VM_SEALED)] = "sl", #endif }; + unsigned long pad_pages = vma_pad_pages(vma); size_t i; seq_puts(m, "VmFlags: "); for (i = 0; i < BITS_PER_LONG; i++) { if (!mnemonics[i][0]) continue; + if ((1UL << i) & VM_PAD_MASK) + continue; if (vma->vm_flags & (1UL << i)) seq_printf(m, "%s ", mnemonics[i]); } + if (pad_pages) + seq_printf(m, "pad=%lukB", pad_pages << (PAGE_SHIFT - 10)); + seq_putc(m, '\n'); }