~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/pageblock-flags.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * Macros for manipulating and testing flags related to a
  4  * pageblock_nr_pages number of pages.
  5  *
  6  * Copyright (C) IBM Corporation, 2006
  7  *
  8  * Original author, Mel Gorman
  9  * Major cleanups and reduction of bit operations, Andy Whitcroft
 10  */
 11 #ifndef PAGEBLOCK_FLAGS_H
 12 #define PAGEBLOCK_FLAGS_H
 13 
 14 #include <linux/types.h>
 15 
 16 #define PB_migratetype_bits 3
 17 /* Bit indices that affect a whole block of pages */
 18 enum pageblock_bits {
 19         PB_migrate,
 20         PB_migrate_end = PB_migrate + PB_migratetype_bits - 1,
 21                         /* 3 bits required for migrate types */
 22         PB_migrate_skip,/* If set the block is skipped by compaction */
 23 
 24         /*
 25          * Assume the bits will always align on a word. If this assumption
 26          * changes then get/set pageblock needs updating.
 27          */
 28         NR_PAGEBLOCK_BITS
 29 };
 30 
 31 #if defined(CONFIG_HUGETLB_PAGE)
 32 
 33 #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
 34 
 35 /* Huge page sizes are variable */
 36 extern unsigned int pageblock_order;
 37 
 38 #else /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
 39 
 40 /*
 41  * Huge pages are a constant size, but don't exceed the maximum allocation
 42  * granularity.
 43  */
 44 #define pageblock_order         MIN_T(unsigned int, HUGETLB_PAGE_ORDER, MAX_PAGE_ORDER)
 45 
 46 #endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
 47 
 48 #elif defined(CONFIG_TRANSPARENT_HUGEPAGE)
 49 
 50 #define pageblock_order         MIN_T(unsigned int, HPAGE_PMD_ORDER, MAX_PAGE_ORDER)
 51 
 52 #else /* CONFIG_TRANSPARENT_HUGEPAGE */
 53 
 54 /* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
 55 #define pageblock_order         MAX_PAGE_ORDER
 56 
 57 #endif /* CONFIG_HUGETLB_PAGE */
 58 
 59 #define pageblock_nr_pages      (1UL << pageblock_order)
 60 #define pageblock_align(pfn)    ALIGN((pfn), pageblock_nr_pages)
 61 #define pageblock_aligned(pfn)  IS_ALIGNED((pfn), pageblock_nr_pages)
 62 #define pageblock_start_pfn(pfn)        ALIGN_DOWN((pfn), pageblock_nr_pages)
 63 #define pageblock_end_pfn(pfn)          ALIGN((pfn) + 1, pageblock_nr_pages)
 64 
 65 /* Forward declaration */
 66 struct page;
 67 
 68 unsigned long get_pfnblock_flags_mask(const struct page *page,
 69                                 unsigned long pfn,
 70                                 unsigned long mask);
 71 
 72 void set_pfnblock_flags_mask(struct page *page,
 73                                 unsigned long flags,
 74                                 unsigned long pfn,
 75                                 unsigned long mask);
 76 
 77 /* Declarations for getting and setting flags. See mm/page_alloc.c */
 78 #ifdef CONFIG_COMPACTION
 79 #define get_pageblock_skip(page) \
 80         get_pfnblock_flags_mask(page, page_to_pfn(page),        \
 81                         (1 << (PB_migrate_skip)))
 82 #define clear_pageblock_skip(page) \
 83         set_pfnblock_flags_mask(page, 0, page_to_pfn(page),     \
 84                         (1 << PB_migrate_skip))
 85 #define set_pageblock_skip(page) \
 86         set_pfnblock_flags_mask(page, (1 << PB_migrate_skip),   \
 87                         page_to_pfn(page),                      \
 88                         (1 << PB_migrate_skip))
 89 #else
 90 static inline bool get_pageblock_skip(struct page *page)
 91 {
 92         return false;
 93 }
 94 static inline void clear_pageblock_skip(struct page *page)
 95 {
 96 }
 97 static inline void set_pageblock_skip(struct page *page)
 98 {
 99 }
100 #endif /* CONFIG_COMPACTION */
101 
102 #endif  /* PAGEBLOCK_FLAGS_H */
103 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php