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: rajman 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
2099597401
Коммит
955c1cd740
|
@ -4300,25 +4300,24 @@ static inline void setup_usemap(struct pglist_data *pgdat,
|
|||
|
||||
#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 */
|
||||
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 */
|
||||
if (pageblock_order)
|
||||
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.
|
||||
* 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;
|
||||
}
|
||||
|
@ -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()
|
||||
* and pageblock_default_order() are unused as pageblock_order is set
|
||||
* at compile-time. See include/linux/pageblock-flags.h for the values of
|
||||
* pageblock_order based on the kernel config
|
||||
* is unused as pageblock_order is set at compile-time. See
|
||||
* include/linux/pageblock-flags.h for the values of pageblock_order based on
|
||||
* 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 */
|
||||
|
||||
|
@ -4422,7 +4419,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
|
|||
if (!size)
|
||||
continue;
|
||||
|
||||
set_pageblock_order(pageblock_default_order());
|
||||
set_pageblock_order();
|
||||
setup_usemap(pgdat, zone, size);
|
||||
ret = init_currently_empty_zone(zone, zone_start_pfn,
|
||||
size, MEMMAP_EARLY);
|
||||
|
|
Загрузка…
Ссылка в новой задаче