summaryrefslogtreecommitdiff
path: root/fs/proc/page.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/proc/page.c')
-rw-r--r--fs/proc/page.c56
1 files changed, 23 insertions, 33 deletions
diff --git a/fs/proc/page.c b/fs/proc/page.c
index f9b2c2c906cd..260772b20bd9 100644
--- a/fs/proc/page.c
+++ b/fs/proc/page.c
@@ -148,8 +148,6 @@ u64 stable_page_flags(const struct page *page)
const struct folio *folio;
struct page_snapshot ps;
unsigned long k;
- unsigned long mapping;
- bool is_anon;
u64 u = 0;
/*
@@ -157,24 +155,21 @@ u64 stable_page_flags(const struct page *page)
* it differentiates a memory hole from a page with no flags
*/
if (!page)
- return 1 << KPF_NOPAGE;
+ return BIT_ULL(KPF_NOPAGE);
snapshot_page(&ps, page);
folio = &ps.folio_snapshot;
-
k = folio->flags.f;
- mapping = (unsigned long)folio->mapping;
- is_anon = mapping & FOLIO_MAPPING_ANON;
/*
* pseudo flags for the well known (anonymous) memory mapped pages
*/
if (folio_mapped(folio))
- u |= 1 << KPF_MMAP;
- if (is_anon) {
- u |= 1 << KPF_ANON;
- if (mapping & FOLIO_MAPPING_KSM)
- u |= 1 << KPF_KSM;
+ u |= BIT_ULL(KPF_MMAP);
+ if (folio_test_anon(folio)) {
+ u |= BIT_ULL(KPF_ANON);
+ if (folio_test_ksm(folio))
+ u |= BIT_ULL(KPF_KSM);
}
/*
@@ -184,36 +179,32 @@ u64 stable_page_flags(const struct page *page)
if (ps.idx == 0)
u |= kpf_copy_bit(k, KPF_COMPOUND_HEAD, PG_head);
else
- u |= 1 << KPF_COMPOUND_TAIL;
+ u |= BIT_ULL(KPF_COMPOUND_TAIL);
if (folio_test_hugetlb(folio))
- u |= 1 << KPF_HUGE;
+ u |= BIT_ULL(KPF_HUGE);
else if (folio_test_large(folio) &&
folio_test_large_rmappable(folio)) {
/* Note: we indicate any THPs here, not just PMD-sized ones */
- u |= 1 << KPF_THP;
+ u |= BIT_ULL(KPF_THP);
} else if (is_huge_zero_pfn(ps.pfn)) {
- u |= 1 << KPF_ZERO_PAGE;
- u |= 1 << KPF_THP;
+ u |= BIT_ULL(KPF_ZERO_PAGE);
+ u |= BIT_ULL(KPF_THP);
} else if (is_zero_pfn(ps.pfn)) {
- u |= 1 << KPF_ZERO_PAGE;
+ u |= BIT_ULL(KPF_ZERO_PAGE);
}
if (ps.flags & PAGE_SNAPSHOT_PG_BUDDY)
- u |= 1 << KPF_BUDDY;
+ u |= BIT_ULL(KPF_BUDDY);
+
+ if (ps.flags & PAGE_SNAPSHOT_PG_IDLE)
+ u |= BIT_ULL(KPF_IDLE);
if (folio_test_offline(folio))
- u |= 1 << KPF_OFFLINE;
+ u |= BIT_ULL(KPF_OFFLINE);
if (folio_test_pgtable(folio))
- u |= 1 << KPF_PGTABLE;
+ u |= BIT_ULL(KPF_PGTABLE);
if (folio_test_slab(folio))
- u |= 1 << KPF_SLAB;
-
-#if defined(CONFIG_PAGE_IDLE_FLAG) && defined(CONFIG_64BIT)
- u |= kpf_copy_bit(k, KPF_IDLE, PG_idle);
-#else
- if (ps.flags & PAGE_SNAPSHOT_PG_IDLE)
- u |= 1 << KPF_IDLE;
-#endif
+ u |= BIT_ULL(KPF_SLAB);
u |= kpf_copy_bit(k, KPF_LOCKED, PG_locked);
u |= kpf_copy_bit(k, KPF_DIRTY, PG_dirty);
@@ -225,16 +216,15 @@ u64 stable_page_flags(const struct page *page)
u |= kpf_copy_bit(k, KPF_ACTIVE, PG_active);
u |= kpf_copy_bit(k, KPF_RECLAIM, PG_reclaim);
-#define SWAPCACHE ((1 << PG_swapbacked) | (1 << PG_swapcache))
- if ((k & SWAPCACHE) == SWAPCACHE)
- u |= 1 << KPF_SWAPCACHE;
- u |= kpf_copy_bit(k, KPF_SWAPBACKED, PG_swapbacked);
+ if (folio_test_swapcache(folio))
+ u |= BIT_ULL(KPF_SWAPCACHE);
+ u |= kpf_copy_bit(k, KPF_SWAPBACKED, PG_swapbacked);
u |= kpf_copy_bit(k, KPF_UNEVICTABLE, PG_unevictable);
u |= kpf_copy_bit(k, KPF_MLOCKED, PG_mlocked);
#ifdef CONFIG_MEMORY_FAILURE
- if (u & (1 << KPF_HUGE))
+ if (u & BIT_ULL(KPF_HUGE))
u |= kpf_copy_bit(k, KPF_HWPOISON, PG_hwpoison);
else
u |= kpf_copy_bit(ps.page_snapshot.flags.f, KPF_HWPOISON, PG_hwpoison);