Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: /* 2: * Macros for manipulating and testing flags related to a 3: * pageblock_nr_pages number of pages. 4: * 5: * This program is free software; you can redistribute it and/or modify 6: * it under the terms of the GNU General Public License as published by 7: * the Free Software Foundation version 2 of the License 8: * 9: * This program is distributed in the hope that it will be useful, 10: * but WITHOUT ANY WARRANTY; without even the implied warranty of 11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12: * GNU General Public License for more details. 13: * 14: * You should have received a copy of the GNU General Public License 15: * along with this program; if not, write to the Free Software 16: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17: * 18: * Copyright (C) IBM Corporation, 2006 19: * 20: * Original author, Mel Gorman 21: * Major cleanups and reduction of bit operations, Andy Whitcroft 22: */ 23: #ifndef PAGEBLOCK_FLAGS_H 24: #define PAGEBLOCK_FLAGS_H 25: 26: #include <linux/types.h> 27: 28: /* Bit indices that affect a whole block of pages */ 29: enum pageblock_bits { 30: PB_migrate, 31: PB_migrate_end = PB_migrate + 3 - 1, 32: /* 3 bits required for migrate types */ 33: #ifdef CONFIG_COMPACTION 34: PB_migrate_skip,/* If set the block is skipped by compaction */ 35: #endif /* CONFIG_COMPACTION */ 36: NR_PAGEBLOCK_BITS 37: }; 38: 39: #ifdef CONFIG_HUGETLB_PAGE 40: 41: #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE 42: 43: /* Huge page sizes are variable */ 44: extern int pageblock_order; 45: 46: #else /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */ 47: 48: /* Huge pages are a constant size */ 49: #define pageblock_order HUGETLB_PAGE_ORDER 50: 51: #endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */ 52: 53: #else /* CONFIG_HUGETLB_PAGE */ 54: 55: /* If huge pages are not used, group by MAX_ORDER_NR_PAGES */ 56: #define pageblock_order (MAX_ORDER-1) 57: 58: #endif /* CONFIG_HUGETLB_PAGE */ 59: 60: #define pageblock_nr_pages (1UL << pageblock_order) 61: 62: /* Forward declaration */ 63: struct page; 64: 65: /* Declarations for getting and setting flags. See mm/page_alloc.c */ 66: unsigned long get_pageblock_flags_group(struct page *page, 67: int start_bitidx, int end_bitidx); 68: void set_pageblock_flags_group(struct page *page, unsigned long flags, 69: int start_bitidx, int end_bitidx); 70: 71: #ifdef CONFIG_COMPACTION 72: #define get_pageblock_skip(page) \ 73: get_pageblock_flags_group(page, PB_migrate_skip, \ 74: PB_migrate_skip) 75: #define clear_pageblock_skip(page) \ 76: set_pageblock_flags_group(page, 0, PB_migrate_skip, \ 77: PB_migrate_skip) 78: #define set_pageblock_skip(page) \ 79: set_pageblock_flags_group(page, 1, PB_migrate_skip, \ 80: PB_migrate_skip) 81: #endif /* CONFIG_COMPACTION */ 82: 83: #endif /* PAGEBLOCK_FLAGS_H */ 84: