提交 955c1cd7 编写于 作者: A Andrew Morton 提交者: Linus Torvalds

mm/page_alloc.c: remove pageblock_default_order()

This has always been broken: one version takes an unsigned int and the
other version takes no arguments.  This bug was hidden because one
version of set_pageblock_order() was a macro which doesn't evaluate its
argument.

Simplify it all and remove pageblock_default_order() altogether.
Reported-by: Nrajman mekaco <rajman.mekaco@gmail.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Minchan Kim <minchan.kim@gmail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 20995974
...@@ -4300,25 +4300,24 @@ static inline void setup_usemap(struct pglist_data *pgdat, ...@@ -4300,25 +4300,24 @@ static inline void setup_usemap(struct pglist_data *pgdat,
#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
/* Return a sensible default order for the pageblock size. */
static inline int pageblock_default_order(void)
{
if (HPAGE_SHIFT > PAGE_SHIFT)
return HUGETLB_PAGE_ORDER;
return MAX_ORDER-1;
}
/* Initialise the number of pages represented by NR_PAGEBLOCK_BITS */ /* Initialise the number of pages represented by NR_PAGEBLOCK_BITS */
static inline void __init set_pageblock_order(unsigned int order) static inline void __init set_pageblock_order(void)
{ {
unsigned int order;
/* Check that pageblock_nr_pages has not already been setup */ /* Check that pageblock_nr_pages has not already been setup */
if (pageblock_order) if (pageblock_order)
return; return;
if (HPAGE_SHIFT > PAGE_SHIFT)
order = HUGETLB_PAGE_ORDER;
else
order = MAX_ORDER - 1;
/* /*
* Assume the largest contiguous order of interest is a huge page. * Assume the largest contiguous order of interest is a huge page.
* This value may be variable depending on boot parameters on IA64 * This value may be variable depending on boot parameters on IA64 and
* powerpc.
*/ */
pageblock_order = order; pageblock_order = order;
} }
...@@ -4326,15 +4325,13 @@ static inline void __init set_pageblock_order(unsigned int order) ...@@ -4326,15 +4325,13 @@ static inline void __init set_pageblock_order(unsigned int order)
/* /*
* When CONFIG_HUGETLB_PAGE_SIZE_VARIABLE is not set, set_pageblock_order() * When CONFIG_HUGETLB_PAGE_SIZE_VARIABLE is not set, set_pageblock_order()
* and pageblock_default_order() are unused as pageblock_order is set * is unused as pageblock_order is set at compile-time. See
* at compile-time. See include/linux/pageblock-flags.h for the values of * include/linux/pageblock-flags.h for the values of pageblock_order based on
* pageblock_order based on the kernel config * the kernel config
*/ */
static inline int pageblock_default_order(unsigned int order) static inline void set_pageblock_order(void)
{ {
return MAX_ORDER-1;
} }
#define set_pageblock_order(x) do {} while (0)
#endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */ #endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
...@@ -4422,7 +4419,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat, ...@@ -4422,7 +4419,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
if (!size) if (!size)
continue; continue;
set_pageblock_order(pageblock_default_order()); set_pageblock_order();
setup_usemap(pgdat, zone, size); setup_usemap(pgdat, zone, size);
ret = init_currently_empty_zone(zone, zone_start_pfn, ret = init_currently_empty_zone(zone, zone_start_pfn,
size, MEMMAP_EARLY); size, MEMMAP_EARLY);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册