|
@@ -28,9 +28,16 @@ struct page_cgroup *lookup_page_cgroup(struct page *page)
|
|
|
struct page_cgroup *base;
|
|
|
|
|
|
base = NODE_DATA(page_to_nid(page))->node_page_cgroup;
|
|
|
+#ifdef CONFIG_DEBUG_VM
|
|
|
+ /*
|
|
|
+ * The sanity checks the page allocator does upon freeing a
|
|
|
+ * page can reach here before the page_cgroup arrays are
|
|
|
+ * allocated when feeding a range of pages to the allocator
|
|
|
+ * for the first time during bootup or memory hotplug.
|
|
|
+ */
|
|
|
if (unlikely(!base))
|
|
|
return NULL;
|
|
|
-
|
|
|
+#endif
|
|
|
offset = pfn - NODE_DATA(page_to_nid(page))->node_start_pfn;
|
|
|
return base + offset;
|
|
|
}
|
|
@@ -85,9 +92,16 @@ struct page_cgroup *lookup_page_cgroup(struct page *page)
|
|
|
{
|
|
|
unsigned long pfn = page_to_pfn(page);
|
|
|
struct mem_section *section = __pfn_to_section(pfn);
|
|
|
-
|
|
|
+#ifdef CONFIG_DEBUG_VM
|
|
|
+ /*
|
|
|
+ * The sanity checks the page allocator does upon freeing a
|
|
|
+ * page can reach here before the page_cgroup arrays are
|
|
|
+ * allocated when feeding a range of pages to the allocator
|
|
|
+ * for the first time during bootup or memory hotplug.
|
|
|
+ */
|
|
|
if (!section->page_cgroup)
|
|
|
return NULL;
|
|
|
+#endif
|
|
|
return section->page_cgroup + pfn;
|
|
|
}
|
|
|
|