|
@@ -635,3 +635,39 @@ mem_init (void)
|
|
|
ia32_mem_init();
|
|
|
#endif
|
|
|
}
|
|
|
+
|
|
|
+#ifdef CONFIG_MEMORY_HOTPLUG
|
|
|
+void online_page(struct page *page)
|
|
|
+{
|
|
|
+ ClearPageReserved(page);
|
|
|
+ set_page_count(page, 1);
|
|
|
+ __free_page(page);
|
|
|
+ totalram_pages++;
|
|
|
+ num_physpages++;
|
|
|
+}
|
|
|
+
|
|
|
+int add_memory(u64 start, u64 size)
|
|
|
+{
|
|
|
+ pg_data_t *pgdat;
|
|
|
+ struct zone *zone;
|
|
|
+ unsigned long start_pfn = start >> PAGE_SHIFT;
|
|
|
+ unsigned long nr_pages = size >> PAGE_SHIFT;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ pgdat = NODE_DATA(0);
|
|
|
+
|
|
|
+ zone = pgdat->node_zones + ZONE_NORMAL;
|
|
|
+ ret = __add_pages(zone, start_pfn, nr_pages);
|
|
|
+
|
|
|
+ if (ret)
|
|
|
+ printk("%s: Problem encountered in __add_pages() as ret=%d\n",
|
|
|
+ __FUNCTION__, ret);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+int remove_memory(u64 start, u64 size)
|
|
|
+{
|
|
|
+ return -EINVAL;
|
|
|
+}
|
|
|
+#endif
|