diff options
-rw-r--r-- | mm/memory_hotplug.c | 25 |
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 */ | ||
197 | static 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 | |||
195 | int add_memory(int nid, u64 start, u64 size) | 217 | int 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; |
221 | error: | 246 | error: |
222 | /* rollback pgdat allocation and others */ | 247 | /* rollback pgdat allocation and others */ |