|
@@ -734,7 +734,7 @@ buffered_rmqueue(struct zone *zone, int order, gfp_t gfp_flags)
|
|
|
* of the allocation.
|
|
|
*/
|
|
|
int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
|
|
|
- int classzone_idx, int can_try_harder, int gfp_high)
|
|
|
+ int classzone_idx, int can_try_harder, gfp_t gfp_high)
|
|
|
{
|
|
|
/* free_pages my go negative - that's OK */
|
|
|
long min = mark, free_pages = z->free_pages - (1 << order) + 1;
|
|
@@ -777,7 +777,7 @@ struct page * fastcall
|
|
|
__alloc_pages(gfp_t gfp_mask, unsigned int order,
|
|
|
struct zonelist *zonelist)
|
|
|
{
|
|
|
- const int wait = gfp_mask & __GFP_WAIT;
|
|
|
+ const gfp_t wait = gfp_mask & __GFP_WAIT;
|
|
|
struct zone **zones, *z;
|
|
|
struct page *page;
|
|
|
struct reclaim_state reclaim_state;
|
|
@@ -996,7 +996,7 @@ fastcall unsigned long get_zeroed_page(gfp_t gfp_mask)
|
|
|
* get_zeroed_page() returns a 32-bit address, which cannot represent
|
|
|
* a highmem page
|
|
|
*/
|
|
|
- BUG_ON(gfp_mask & __GFP_HIGHMEM);
|
|
|
+ BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0);
|
|
|
|
|
|
page = alloc_pages(gfp_mask | __GFP_ZERO, 0);
|
|
|
if (page)
|
|
@@ -1428,6 +1428,16 @@ static int __init build_zonelists_node(pg_data_t *pgdat, struct zonelist *zoneli
|
|
|
return j;
|
|
|
}
|
|
|
|
|
|
+static inline int highest_zone(int zone_bits)
|
|
|
+{
|
|
|
+ int res = ZONE_NORMAL;
|
|
|
+ if (zone_bits & (__force int)__GFP_HIGHMEM)
|
|
|
+ res = ZONE_HIGHMEM;
|
|
|
+ if (zone_bits & (__force int)__GFP_DMA)
|
|
|
+ res = ZONE_DMA;
|
|
|
+ return res;
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_NUMA
|
|
|
#define MAX_NODE_LOAD (num_online_nodes())
|
|
|
static int __initdata node_load[MAX_NUMNODES];
|
|
@@ -1524,11 +1534,7 @@ static void __init build_zonelists(pg_data_t *pgdat)
|
|
|
zonelist = pgdat->node_zonelists + i;
|
|
|
for (j = 0; zonelist->zones[j] != NULL; j++);
|
|
|
|
|
|
- k = ZONE_NORMAL;
|
|
|
- if (i & __GFP_HIGHMEM)
|
|
|
- k = ZONE_HIGHMEM;
|
|
|
- if (i & __GFP_DMA)
|
|
|
- k = ZONE_DMA;
|
|
|
+ k = highest_zone(i);
|
|
|
|
|
|
j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
|
|
|
zonelist->zones[j] = NULL;
|
|
@@ -1549,12 +1555,7 @@ static void __init build_zonelists(pg_data_t *pgdat)
|
|
|
zonelist = pgdat->node_zonelists + i;
|
|
|
|
|
|
j = 0;
|
|
|
- k = ZONE_NORMAL;
|
|
|
- if (i & __GFP_HIGHMEM)
|
|
|
- k = ZONE_HIGHMEM;
|
|
|
- if (i & __GFP_DMA)
|
|
|
- k = ZONE_DMA;
|
|
|
-
|
|
|
+ k = highest_zone(i);
|
|
|
j = build_zonelists_node(pgdat, zonelist, j, k);
|
|
|
/*
|
|
|
* Now we build the zonelist so that it contains the zones
|