|
@@ -687,62 +687,19 @@ static void node_states_check_changes_online(unsigned long nr_pages,
|
|
|
struct zone *zone, struct memory_notify *arg)
|
|
|
{
|
|
|
int nid = zone_to_nid(zone);
|
|
|
- enum zone_type zone_last = ZONE_NORMAL;
|
|
|
|
|
|
- /*
|
|
|
- * If we have HIGHMEM or movable node, node_states[N_NORMAL_MEMORY]
|
|
|
- * contains nodes which have zones of 0...ZONE_NORMAL,
|
|
|
- * set zone_last to ZONE_NORMAL.
|
|
|
- *
|
|
|
- * If we don't have HIGHMEM nor movable node,
|
|
|
- * node_states[N_NORMAL_MEMORY] contains nodes which have zones of
|
|
|
- * 0...ZONE_MOVABLE, set zone_last to ZONE_MOVABLE.
|
|
|
- */
|
|
|
- if (N_MEMORY == N_NORMAL_MEMORY)
|
|
|
- zone_last = ZONE_MOVABLE;
|
|
|
+ arg->status_change_nid = -1;
|
|
|
+ arg->status_change_nid_normal = -1;
|
|
|
+ arg->status_change_nid_high = -1;
|
|
|
|
|
|
- /*
|
|
|
- * if the memory to be online is in a zone of 0...zone_last, and
|
|
|
- * the zones of 0...zone_last don't have memory before online, we will
|
|
|
- * need to set the node to node_states[N_NORMAL_MEMORY] after
|
|
|
- * the memory is online.
|
|
|
- */
|
|
|
- if (zone_idx(zone) <= zone_last && !node_state(nid, N_NORMAL_MEMORY))
|
|
|
+ if (!node_state(nid, N_MEMORY))
|
|
|
+ arg->status_change_nid = nid;
|
|
|
+ if (zone_idx(zone) <= ZONE_NORMAL && !node_state(nid, N_NORMAL_MEMORY))
|
|
|
arg->status_change_nid_normal = nid;
|
|
|
- else
|
|
|
- arg->status_change_nid_normal = -1;
|
|
|
-
|
|
|
#ifdef CONFIG_HIGHMEM
|
|
|
- /*
|
|
|
- * If we have movable node, node_states[N_HIGH_MEMORY]
|
|
|
- * contains nodes which have zones of 0...ZONE_HIGHMEM,
|
|
|
- * set zone_last to ZONE_HIGHMEM.
|
|
|
- *
|
|
|
- * If we don't have movable node, node_states[N_NORMAL_MEMORY]
|
|
|
- * contains nodes which have zones of 0...ZONE_MOVABLE,
|
|
|
- * set zone_last to ZONE_MOVABLE.
|
|
|
- */
|
|
|
- zone_last = ZONE_HIGHMEM;
|
|
|
- if (N_MEMORY == N_HIGH_MEMORY)
|
|
|
- zone_last = ZONE_MOVABLE;
|
|
|
-
|
|
|
- if (zone_idx(zone) <= zone_last && !node_state(nid, N_HIGH_MEMORY))
|
|
|
+ if (zone_idx(zone) <= N_HIGH_MEMORY && !node_state(nid, N_HIGH_MEMORY))
|
|
|
arg->status_change_nid_high = nid;
|
|
|
- else
|
|
|
- arg->status_change_nid_high = -1;
|
|
|
-#else
|
|
|
- arg->status_change_nid_high = arg->status_change_nid_normal;
|
|
|
#endif
|
|
|
-
|
|
|
- /*
|
|
|
- * if the node don't have memory befor online, we will need to
|
|
|
- * set the node to node_states[N_MEMORY] after the memory
|
|
|
- * is online.
|
|
|
- */
|
|
|
- if (!node_state(nid, N_MEMORY))
|
|
|
- arg->status_change_nid = nid;
|
|
|
- else
|
|
|
- arg->status_change_nid = -1;
|
|
|
}
|
|
|
|
|
|
static void node_states_set_node(int node, struct memory_notify *arg)
|