#endif /* CONFIG_FINEGRAINED_THP */
show_val_kb(m, "ShmemHugePages: ",
global_node_page_state(NR_SHMEM_THPS) * HPAGE_PMD_NR);
+#ifdef CONFIG_FINEGRAINED_THP
+ show_val_kb(m, "Shmem64KBPages: ",
+ global_node_page_state(NR_SHMEM_64KB_THPS) * HPAGE_CONT_PTE_NR);
+#endif /* CONFIG_FINEGRAINED_THP */
show_val_kb(m, "ShmemPmdMapped: ",
global_node_page_state(NR_SHMEM_PMDMAPPED) * HPAGE_PMD_NR);
#ifdef CONFIG_FINEGRAINED_THP
NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */
NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */
NR_SHMEM_THPS,
+#ifdef CONFIG_FINEGRAINED_THP
+ NR_SHMEM_64KB_THPS,
+#endif /* CONFIG_FINEGRAINED_THP */
NR_SHMEM_PMDMAPPED,
#ifdef CONFIG_FINEGRAINED_THP
NR_SHMEM_PTEMAPPED,
__mod_lruvec_page_state(page, NR_FILE_PAGES, -nr);
if (PageSwapBacked(page)) {
__mod_lruvec_page_state(page, NR_SHMEM, -nr);
- if (PageTransHuge(page))
+ if (PageTransHuge(page)) {
+#ifdef CONFIG_FINEGRAINED_THP
+ if (thp_nr_pages(page) == HPAGE_PMD_NR)
+ __dec_node_page_state(page, NR_SHMEM_THPS);
+ else
+ __dec_node_page_state(page, NR_SHMEM_64KB_THPS);
+#else /* CONFIG_FINEGRAINED_THP */
__dec_node_page_state(page, NR_SHMEM_THPS);
+#endif /* CONFIG_FINEGRAINED_THP */
+ }
} else if (PageTransHuge(page)) {
#ifdef CONFIG_FINEGRAINED_THP
if (thp_nr_pages(page) == HPAGE_PMD_NR)
}
spin_unlock(&ds_queue->split_queue_lock);
if (mapping) {
- if (PageSwapBacked(head))
- __dec_node_page_state(head, NR_SHMEM_THPS);
- else {
+ if (PageSwapBacked(head)) {
+#ifdef CONFIG_FINEGRAINED_THP
+ if (thp_nr_pages(head) == HPAGE_CONT_PTE_NR)
+ __dec_node_page_state(head, NR_SHMEM_64KB_THPS);
+ else
+#endif /* CONFIG_FINEGRAINED_THP */
+ __dec_node_page_state(head, NR_SHMEM_THPS);
+ } else {
#ifdef CONFIG_FINEGRAINED_THP
if (thp_nr_pages(head) == HPAGE_CONT_PTE_NR)
__dec_node_page_state(head, NR_FILE_64KB_THPS);
}
if (is_shmem)
+#ifdef CONFIG_FINEGRAINED_THP
+ if (hpage_type == THP_TYPE_64KB)
+ __inc_node_page_state(new_page, NR_SHMEM_64KB_THPS);
+ else
+ __inc_node_page_state(new_page, NR_SHMEM_THPS);
+#else /* CONFIG_FINEGRAINED_THP */
__inc_node_page_state(new_page, NR_SHMEM_THPS);
+#endif /* CONFIG_FINEGRAINED_THP */
else {
#ifdef CONFIG_FINEGRAINED_THP
if (hpage_type == THP_TYPE_64KB)
" shmem:%lukB"
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
" shmem_thp: %lukB"
+#ifdef CONFIG_FINEGRAINED_THP
+ " shmem_64kb_thp: %lukB"
+#endif /* CONFIG_FINEGRAINED_THP */
" shmem_pmdmapped: %lukB"
" anon_thp: %lukB"
#endif
K(node_page_state(pgdat, NR_SHMEM)),
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
K(node_page_state(pgdat, NR_SHMEM_THPS) * HPAGE_PMD_NR),
+#ifdef CONFIG_FINEGRAINED_THP
+ K(node_page_state(pgdat, NR_SHMEM_64KB_THPS) * HPAGE_CONT_PTE_NR),
+#endif /* CONFIG_FINEGRAINED_THP */
K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)
* HPAGE_PMD_NR),
K(node_page_state(pgdat, NR_ANON_THPS) * HPAGE_PMD_NR),
}
if (PageTransHuge(page)) {
count_vm_event(THP_FILE_ALLOC);
+#ifdef CONFIG_FINEGRAINED_THP
+ if (thp_nr_pages(page) == HPAGE_CONT_PTE_NR)
+ __inc_node_page_state(page, NR_SHMEM_64KB_THPS);
+ else
+#endif /* CONFIG_FINEGRAINED_THP */
__inc_node_page_state(page, NR_SHMEM_THPS);
}
mapping->nrpages += nr;
"nr_writeback_temp",
"nr_shmem",
"nr_shmem_hugepages",
+#ifdef CONFIG_FINEGRAINED_THP
+ "nr_shmem_64kb_hugepages",
+#endif
"nr_shmem_pmdmapped",
#ifdef CONFIG_FINEGRAINED_THP
"nr_shmem_ptemapped",