Loading include/linux/memory_hotplug.h +6 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,12 @@ extern void register_page_bootmem_info_node(struct pglist_data *pgdat); extern void put_page_bootmem(struct page *page); #endif /* * Lock for memory hotplug guarantees 1) all callbacks for memory hotplug * notifier will be called under this. 2) offline/online/add/remove memory * will not run simultaneously. */ void lock_memory_hotplug(void); void unlock_memory_hotplug(void); Loading mm/memory_hotplug.c +4 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) int ret; struct memory_notify arg; lock_memory_hotplug(); arg.start_pfn = pfn; arg.nr_pages = nr_pages; arg.status_change_nid = -1; Loading @@ -421,6 +422,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) ret = notifier_to_errno(ret); if (ret) { memory_notify(MEM_CANCEL_ONLINE, &arg); unlock_memory_hotplug(); return ret; } /* Loading @@ -445,6 +447,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) printk(KERN_DEBUG "online_pages %lx at %lx failed\n", nr_pages, pfn); memory_notify(MEM_CANCEL_ONLINE, &arg); unlock_memory_hotplug(); return ret; } Loading @@ -469,6 +472,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) if (onlined_pages) memory_notify(MEM_ONLINE, &arg); unlock_memory_hotplug(); return 0; } Loading mm/slub.c +2 −2 Original line number Diff line number Diff line Loading @@ -3797,7 +3797,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s, } } down_read(&slub_lock); lock_memory_hotplug(); #ifdef CONFIG_SLUB_DEBUG if (flags & SO_ALL) { for_each_node_state(node, N_NORMAL_MEMORY) { Loading Loading @@ -3838,7 +3838,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s, x += sprintf(buf + x, " N%d=%lu", node, nodes[node]); #endif up_read(&slub_lock); unlock_memory_hotplug(); kfree(nodes); return x + sprintf(buf + x, "\n"); } Loading Loading
include/linux/memory_hotplug.h +6 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,12 @@ extern void register_page_bootmem_info_node(struct pglist_data *pgdat); extern void put_page_bootmem(struct page *page); #endif /* * Lock for memory hotplug guarantees 1) all callbacks for memory hotplug * notifier will be called under this. 2) offline/online/add/remove memory * will not run simultaneously. */ void lock_memory_hotplug(void); void unlock_memory_hotplug(void); Loading
mm/memory_hotplug.c +4 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) int ret; struct memory_notify arg; lock_memory_hotplug(); arg.start_pfn = pfn; arg.nr_pages = nr_pages; arg.status_change_nid = -1; Loading @@ -421,6 +422,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) ret = notifier_to_errno(ret); if (ret) { memory_notify(MEM_CANCEL_ONLINE, &arg); unlock_memory_hotplug(); return ret; } /* Loading @@ -445,6 +447,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) printk(KERN_DEBUG "online_pages %lx at %lx failed\n", nr_pages, pfn); memory_notify(MEM_CANCEL_ONLINE, &arg); unlock_memory_hotplug(); return ret; } Loading @@ -469,6 +472,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) if (onlined_pages) memory_notify(MEM_ONLINE, &arg); unlock_memory_hotplug(); return 0; } Loading
mm/slub.c +2 −2 Original line number Diff line number Diff line Loading @@ -3797,7 +3797,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s, } } down_read(&slub_lock); lock_memory_hotplug(); #ifdef CONFIG_SLUB_DEBUG if (flags & SO_ALL) { for_each_node_state(node, N_NORMAL_MEMORY) { Loading Loading @@ -3838,7 +3838,7 @@ static ssize_t show_slab_objects(struct kmem_cache *s, x += sprintf(buf + x, " N%d=%lu", node, nodes[node]); #endif up_read(&slub_lock); unlock_memory_hotplug(); kfree(nodes); return x + sprintf(buf + x, "\n"); } Loading