diff options
Diffstat (limited to 'mm/page_cgroup.c')
-rw-r--r-- | mm/page_cgroup.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c index f22b4ebbd8dc..3d535d594826 100644 --- a/mm/page_cgroup.c +++ b/mm/page_cgroup.c | |||
@@ -116,10 +116,16 @@ static int __init_refok init_section_page_cgroup(unsigned long pfn) | |||
116 | nid = page_to_nid(pfn_to_page(pfn)); | 116 | nid = page_to_nid(pfn_to_page(pfn)); |
117 | table_size = sizeof(struct page_cgroup) * PAGES_PER_SECTION; | 117 | table_size = sizeof(struct page_cgroup) * PAGES_PER_SECTION; |
118 | VM_BUG_ON(!slab_is_available()); | 118 | VM_BUG_ON(!slab_is_available()); |
119 | base = kmalloc_node(table_size, | 119 | if (node_state(nid, N_HIGH_MEMORY)) { |
120 | base = kmalloc_node(table_size, | ||
120 | GFP_KERNEL | __GFP_NOWARN, nid); | 121 | GFP_KERNEL | __GFP_NOWARN, nid); |
121 | if (!base) | 122 | if (!base) |
122 | base = vmalloc_node(table_size, nid); | 123 | base = vmalloc_node(table_size, nid); |
124 | } else { | ||
125 | base = kmalloc(table_size, GFP_KERNEL | __GFP_NOWARN); | ||
126 | if (!base) | ||
127 | base = vmalloc(table_size); | ||
128 | } | ||
123 | } else { | 129 | } else { |
124 | /* | 130 | /* |
125 | * We don't have to allocate page_cgroup again, but | 131 | * We don't have to allocate page_cgroup again, but |