|
@@ -918,6 +918,7 @@ static void node_states_set_node(int node, struct memory_notify *arg)
|
|
|
|
|
|
int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_type)
|
|
|
{
|
|
|
+ unsigned long flags;
|
|
|
unsigned long onlined_pages = 0;
|
|
|
struct zone *zone;
|
|
|
int need_zonelists_rebuild = 0;
|
|
@@ -996,7 +997,11 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ
|
|
|
|
|
|
zone->managed_pages += onlined_pages;
|
|
|
zone->present_pages += onlined_pages;
|
|
|
+
|
|
|
+ pgdat_resize_lock(zone->zone_pgdat, &flags);
|
|
|
zone->zone_pgdat->node_present_pages += onlined_pages;
|
|
|
+ pgdat_resize_unlock(zone->zone_pgdat, &flags);
|
|
|
+
|
|
|
if (onlined_pages) {
|
|
|
node_states_set_node(zone_to_nid(zone), &arg);
|
|
|
if (need_zonelists_rebuild)
|