diff options
Diffstat (limited to 'include/linux/pageblock-flags.h')
| -rw-r--r-- | include/linux/pageblock-flags.h | 30 | 
1 files changed, 24 insertions, 6 deletions
| diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h index 2ee8cd2466b5..2baeee12f48e 100644 --- a/include/linux/pageblock-flags.h +++ b/include/linux/pageblock-flags.h @@ -30,9 +30,12 @@ enum pageblock_bits {  	PB_migrate,  	PB_migrate_end = PB_migrate + 3 - 1,  			/* 3 bits required for migrate types */ -#ifdef CONFIG_COMPACTION  	PB_migrate_skip,/* If set the block is skipped by compaction */ -#endif /* CONFIG_COMPACTION */ + +	/* +	 * Assume the bits will always align on a word. If this assumption +	 * changes then get/set pageblock needs updating. +	 */  	NR_PAGEBLOCK_BITS  }; @@ -62,11 +65,26 @@ extern int pageblock_order;  /* Forward declaration */  struct page; +unsigned long get_pfnblock_flags_mask(struct page *page, +				unsigned long pfn, +				unsigned long end_bitidx, +				unsigned long mask); + +void set_pfnblock_flags_mask(struct page *page, +				unsigned long flags, +				unsigned long pfn, +				unsigned long end_bitidx, +				unsigned long mask); +  /* Declarations for getting and setting flags. See mm/page_alloc.c */ -unsigned long get_pageblock_flags_group(struct page *page, -					int start_bitidx, int end_bitidx); -void set_pageblock_flags_group(struct page *page, unsigned long flags, -					int start_bitidx, int end_bitidx); +#define get_pageblock_flags_group(page, start_bitidx, end_bitidx) \ +	get_pfnblock_flags_mask(page, page_to_pfn(page),		\ +			end_bitidx,					\ +			(1 << (end_bitidx - start_bitidx + 1)) - 1) +#define set_pageblock_flags_group(page, flags, start_bitidx, end_bitidx) \ +	set_pfnblock_flags_mask(page, flags, page_to_pfn(page),		\ +			end_bitidx,					\ +			(1 << (end_bitidx - start_bitidx + 1)) - 1)  #ifdef CONFIG_COMPACTION  #define get_pageblock_skip(page) \ | 
