From ffeff623824babb6e33a0581744897e7979112e0 Mon Sep 17 00:00:00 2001 From: Konstantin Khlebnikov Date: Thu, 3 May 2012 15:44:43 +1000 Subject: [PATCH] proc/smaps: show amount of hwpoison pages Add the line "HWPoinson: kB" into /proc/pid/smaps if CONFIG_MEMORY_FAILURE=y and some HWPoison pages were found. This may be useful for searching applications which use a broken memory. Signed-off-by: Konstantin Khlebnikov Cc: Andi Kleen Cc: Pavel Emelyanov Cc: Alexey Dobriyan Signed-off-by: Andrew Morton --- fs/proc/task_mmu.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index ddd55c781d11..11e6ff9dce9b 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -394,6 +394,7 @@ struct mem_size_stats { unsigned long anonymous_thp; unsigned long swap; unsigned long nonlinear; + unsigned long hwpoison; u64 pss; }; @@ -416,6 +417,8 @@ static void smaps_pte_entry(pte_t ptent, unsigned long addr, mss->swap += ptent_size; else if (is_migration_entry(swpent)) page = migration_entry_to_page(swpent); + else if (is_hwpoison_entry(swpent)) + mss->hwpoison += ptent_size; } else if (pte_file(ptent)) { if (pte_to_pgoff(ptent) != pgoff) mss->nonlinear += ptent_size; @@ -430,6 +433,9 @@ static void smaps_pte_entry(pte_t ptent, unsigned long addr, if (page->index != pgoff) mss->nonlinear += ptent_size; + if (PageHWPoison(page)) + mss->hwpoison += ptent_size; + mss->resident += ptent_size; /* Accumulate the size in pages that have been accessed. */ if (pte_young(ptent) || PageReferenced(page)) @@ -535,6 +541,10 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) seq_printf(m, "Nonlinear: %8lu kB\n", mss.nonlinear >> 10); + if (IS_ENABLED(CONFIG_MEMORY_FAILURE) && mss.hwpoison) + seq_printf(m, "HWPoison: %8lu kB\n", + mss.hwpoison >> 10); + if (m->count < m->size) /* vma is copied successfully */ m->version = (vma != get_gate_vma(task->mm)) ? vma->vm_start : 0; -- 2.39.5