|
@@ -116,10 +116,16 @@ static int __init_refok init_section_page_cgroup(unsigned long pfn)
|
|
|
nid = page_to_nid(pfn_to_page(pfn));
|
|
|
table_size = sizeof(struct page_cgroup) * PAGES_PER_SECTION;
|
|
|
VM_BUG_ON(!slab_is_available());
|
|
|
- base = kmalloc_node(table_size,
|
|
|
+ if (node_state(nid, N_HIGH_MEMORY)) {
|
|
|
+ base = kmalloc_node(table_size,
|
|
|
GFP_KERNEL | __GFP_NOWARN, nid);
|
|
|
- if (!base)
|
|
|
- base = vmalloc_node(table_size, nid);
|
|
|
+ if (!base)
|
|
|
+ base = vmalloc_node(table_size, nid);
|
|
|
+ } else {
|
|
|
+ base = kmalloc(table_size, GFP_KERNEL | __GFP_NOWARN);
|
|
|
+ if (!base)
|
|
|
+ base = vmalloc(table_size);
|
|
|
+ }
|
|
|
} else {
|
|
|
/*
|
|
|
* We don't have to allocate page_cgroup again, but
|