Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / fs / proc / task_mmu.c
index 4648c7f..f6fa99e 100644 (file)
@@ -448,6 +448,7 @@ struct mem_size_stats {
        unsigned long referenced;
        unsigned long anonymous;
        unsigned long anonymous_thp;
+       unsigned long shmem_thp;
        unsigned long swap;
        unsigned long shared_hugetlb;
        unsigned long private_hugetlb;
@@ -576,7 +577,14 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr,
        page = follow_trans_huge_pmd(vma, addr, pmd, FOLL_DUMP);
        if (IS_ERR_OR_NULL(page))
                return;
-       mss->anonymous_thp += HPAGE_PMD_SIZE;
+       if (PageAnon(page))
+               mss->anonymous_thp += HPAGE_PMD_SIZE;
+       else if (PageSwapBacked(page))
+               mss->shmem_thp += HPAGE_PMD_SIZE;
+       else if (is_zone_device_page(page))
+               /* pass */;
+       else
+               VM_BUG_ON_PAGE(1, page);
        smaps_account(mss, page, true, pmd_young(*pmd), pmd_dirty(*pmd));
 }
 #else
@@ -770,6 +778,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
                   "Referenced:     %8lu kB\n"
                   "Anonymous:      %8lu kB\n"
                   "AnonHugePages:  %8lu kB\n"
+                  "ShmemPmdMapped: %8lu kB\n"
                   "Shared_Hugetlb: %8lu kB\n"
                   "Private_Hugetlb: %7lu kB\n"
                   "Swap:           %8lu kB\n"
@@ -787,6 +796,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
                   mss.referenced >> 10,
                   mss.anonymous >> 10,
                   mss.anonymous_thp >> 10,
+                  mss.shmem_thp >> 10,
                   mss.shared_hugetlb >> 10,
                   mss.private_hugetlb >> 10,
                   mss.swap >> 10,