diff options
Diffstat (limited to 'mm/page_ext.c')
| -rw-r--r-- | mm/page_ext.c | 23 | 
1 files changed, 9 insertions, 14 deletions
diff --git a/mm/page_ext.c b/mm/page_ext.c index 5f5769c7db3b..4ade843ff588 100644 --- a/mm/page_ext.c +++ b/mm/page_ext.c @@ -67,8 +67,9 @@ static struct page_ext_operations *page_ext_ops[] = {  #endif  }; +unsigned long page_ext_size = sizeof(struct page_ext); +  static unsigned long total_usage; -static unsigned long extra_mem;  static bool __init invoke_need_callbacks(void)  { @@ -78,9 +79,8 @@ static bool __init invoke_need_callbacks(void)  	for (i = 0; i < entries; i++) {  		if (page_ext_ops[i]->need && page_ext_ops[i]->need()) { -			page_ext_ops[i]->offset = sizeof(struct page_ext) + -						extra_mem; -			extra_mem += page_ext_ops[i]->size; +			page_ext_ops[i]->offset = page_ext_size; +			page_ext_size += page_ext_ops[i]->size;  			need = true;  		}  	} @@ -99,14 +99,9 @@ static void __init invoke_init_callbacks(void)  	}  } -static unsigned long get_entry_size(void) -{ -	return sizeof(struct page_ext) + extra_mem; -} -  static inline struct page_ext *get_entry(void *base, unsigned long index)  { -	return base + get_entry_size() * index; +	return base + page_ext_size * index;  }  #if !defined(CONFIG_SPARSEMEM) @@ -156,7 +151,7 @@ static int __init alloc_node_page_ext(int nid)  		!IS_ALIGNED(node_end_pfn(nid), MAX_ORDER_NR_PAGES))  		nr_pages += MAX_ORDER_NR_PAGES; -	table_size = get_entry_size() * nr_pages; +	table_size = page_ext_size * nr_pages;  	base = memblock_alloc_try_nid(  			table_size, PAGE_SIZE, __pa(MAX_DMA_ADDRESS), @@ -234,7 +229,7 @@ static int __meminit init_section_page_ext(unsigned long pfn, int nid)  	if (section->page_ext)  		return 0; -	table_size = get_entry_size() * PAGES_PER_SECTION; +	table_size = page_ext_size * PAGES_PER_SECTION;  	base = alloc_page_ext(table_size, nid);  	/* @@ -254,7 +249,7 @@ static int __meminit init_section_page_ext(unsigned long pfn, int nid)  	 * we need to apply a mask.  	 */  	pfn &= PAGE_SECTION_MASK; -	section->page_ext = (void *)base - get_entry_size() * pfn; +	section->page_ext = (void *)base - page_ext_size * pfn;  	total_usage += table_size;  	return 0;  } @@ -267,7 +262,7 @@ static void free_page_ext(void *addr)  		struct page *page = virt_to_page(addr);  		size_t table_size; -		table_size = get_entry_size() * PAGES_PER_SECTION; +		table_size = page_ext_size * PAGES_PER_SECTION;  		BUG_ON(PageReserved(page));  		kmemleak_free(addr);  | 
