File: /Users/paulross/dev/linux/linux-3.13/include/linux/pageblock-flags.h

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: