aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/memory_hotplug.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 83d37a401b3b..0b11a8543441 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -21,6 +21,7 @@
21#include <linux/memory_hotplug.h> 21#include <linux/memory_hotplug.h>
22#include <linux/highmem.h> 22#include <linux/highmem.h>
23#include <linux/vmalloc.h> 23#include <linux/vmalloc.h>
24#include <linux/ioport.h>
24 25
25#include <asm/tlbflush.h> 26#include <asm/tlbflush.h>
26 27
@@ -192,6 +193,27 @@ static void rollback_node_hotadd(int nid, pg_data_t *pgdat)
192 return; 193 return;
193} 194}
194 195
196/* add this memory to iomem resource */
197static void register_memory_resource(u64 start, u64 size)
198{
199 struct resource *res;
200
201 res = kzalloc(sizeof(struct resource), GFP_KERNEL);
202 BUG_ON(!res);
203
204 res->name = "System RAM";
205 res->start = start;
206 res->end = start + size - 1;
207 res->flags = IORESOURCE_MEM;
208 if (request_resource(&iomem_resource, res) < 0) {
209 printk("System RAM resource %llx - %llx cannot be added\n",
210 (unsigned long long)res->start, (unsigned long long)res->end);
211 kfree(res);
212 }
213}
214
215
216
195int add_memory(int nid, u64 start, u64 size) 217int add_memory(int nid, u64 start, u64 size)
196{ 218{
197 pg_data_t *pgdat = NULL; 219 pg_data_t *pgdat = NULL;
@@ -217,6 +239,9 @@ int add_memory(int nid, u64 start, u64 size)
217 /* we online node here. we have no error path from here. */ 239 /* we online node here. we have no error path from here. */
218 node_set_online(nid); 240 node_set_online(nid);
219 241
242 /* register this memory as resource */
243 register_memory_resource(start, size);
244
220 return ret; 245 return ret;
221error: 246error:
222 /* rollback pgdat allocation and others */ 247 /* rollback pgdat allocation and others */