cpuset: use N_MEMORY instead N_HIGH_MEMORY
N_HIGH_MEMORY stands for the nodes that has normal or high memory. N_MEMORY stands for the nodes that has any memory. The code here need to handle with the nodes which have memory, we should use N_MEMORY instead. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Acked-by: Hillf Danton <dhillf@gmail.com> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com> Cc: Christoph Lameter <cl@linux.com> Cc: Lin Feng <linfeng@cn.fujitsu.com> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8219fc48ad
commit
38d7bee9d2
|
@ -218,7 +218,7 @@ and name space for cpusets, with a minimum of additional kernel code.
|
||||||
The cpus and mems files in the root (top_cpuset) cpuset are
|
The cpus and mems files in the root (top_cpuset) cpuset are
|
||||||
read-only. The cpus file automatically tracks the value of
|
read-only. The cpus file automatically tracks the value of
|
||||||
cpu_online_mask using a CPU hotplug notifier, and the mems file
|
cpu_online_mask using a CPU hotplug notifier, and the mems file
|
||||||
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
|
automatically tracks the value of node_states[N_MEMORY]--i.e.,
|
||||||
nodes with memory--using the cpuset_track_online_nodes() hook.
|
nodes with memory--using the cpuset_track_online_nodes() hook.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
|
||||||
return node_possible_map;
|
return node_possible_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define cpuset_current_mems_allowed (node_states[N_HIGH_MEMORY])
|
#define cpuset_current_mems_allowed (node_states[N_MEMORY])
|
||||||
static inline void cpuset_init_current_mems_allowed(void) {}
|
static inline void cpuset_init_current_mems_allowed(void) {}
|
||||||
|
|
||||||
static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
|
static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
|
||||||
|
|
|
@ -302,10 +302,10 @@ static void guarantee_online_cpus(const struct cpuset *cs,
|
||||||
* are online, with memory. If none are online with memory, walk
|
* are online, with memory. If none are online with memory, walk
|
||||||
* up the cpuset hierarchy until we find one that does have some
|
* up the cpuset hierarchy until we find one that does have some
|
||||||
* online mems. If we get all the way to the top and still haven't
|
* online mems. If we get all the way to the top and still haven't
|
||||||
* found any online mems, return node_states[N_HIGH_MEMORY].
|
* found any online mems, return node_states[N_MEMORY].
|
||||||
*
|
*
|
||||||
* One way or another, we guarantee to return some non-empty subset
|
* One way or another, we guarantee to return some non-empty subset
|
||||||
* of node_states[N_HIGH_MEMORY].
|
* of node_states[N_MEMORY].
|
||||||
*
|
*
|
||||||
* Call with callback_mutex held.
|
* Call with callback_mutex held.
|
||||||
*/
|
*/
|
||||||
|
@ -313,14 +313,14 @@ static void guarantee_online_cpus(const struct cpuset *cs,
|
||||||
static void guarantee_online_mems(const struct cpuset *cs, nodemask_t *pmask)
|
static void guarantee_online_mems(const struct cpuset *cs, nodemask_t *pmask)
|
||||||
{
|
{
|
||||||
while (cs && !nodes_intersects(cs->mems_allowed,
|
while (cs && !nodes_intersects(cs->mems_allowed,
|
||||||
node_states[N_HIGH_MEMORY]))
|
node_states[N_MEMORY]))
|
||||||
cs = cs->parent;
|
cs = cs->parent;
|
||||||
if (cs)
|
if (cs)
|
||||||
nodes_and(*pmask, cs->mems_allowed,
|
nodes_and(*pmask, cs->mems_allowed,
|
||||||
node_states[N_HIGH_MEMORY]);
|
node_states[N_MEMORY]);
|
||||||
else
|
else
|
||||||
*pmask = node_states[N_HIGH_MEMORY];
|
*pmask = node_states[N_MEMORY];
|
||||||
BUG_ON(!nodes_intersects(*pmask, node_states[N_HIGH_MEMORY]));
|
BUG_ON(!nodes_intersects(*pmask, node_states[N_MEMORY]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1100,7 +1100,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* top_cpuset.mems_allowed tracks node_stats[N_HIGH_MEMORY];
|
* top_cpuset.mems_allowed tracks node_stats[N_MEMORY];
|
||||||
* it's read-only
|
* it's read-only
|
||||||
*/
|
*/
|
||||||
if (cs == &top_cpuset) {
|
if (cs == &top_cpuset) {
|
||||||
|
@ -1122,7 +1122,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs,
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (!nodes_subset(trialcs->mems_allowed,
|
if (!nodes_subset(trialcs->mems_allowed,
|
||||||
node_states[N_HIGH_MEMORY])) {
|
node_states[N_MEMORY])) {
|
||||||
retval = -EINVAL;
|
retval = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -2026,7 +2026,7 @@ static struct cpuset *cpuset_next(struct list_head *queue)
|
||||||
* before dropping down to the next. It always processes a node before
|
* before dropping down to the next. It always processes a node before
|
||||||
* any of its children.
|
* any of its children.
|
||||||
*
|
*
|
||||||
* In the case of memory hot-unplug, it will remove nodes from N_HIGH_MEMORY
|
* In the case of memory hot-unplug, it will remove nodes from N_MEMORY
|
||||||
* if all present pages from a node are offlined.
|
* if all present pages from a node are offlined.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
|
@ -2065,7 +2065,7 @@ scan_cpusets_upon_hotplug(struct cpuset *root, enum hotplug_event event)
|
||||||
|
|
||||||
/* Continue past cpusets with all mems online */
|
/* Continue past cpusets with all mems online */
|
||||||
if (nodes_subset(cp->mems_allowed,
|
if (nodes_subset(cp->mems_allowed,
|
||||||
node_states[N_HIGH_MEMORY]))
|
node_states[N_MEMORY]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
oldmems = cp->mems_allowed;
|
oldmems = cp->mems_allowed;
|
||||||
|
@ -2073,7 +2073,7 @@ scan_cpusets_upon_hotplug(struct cpuset *root, enum hotplug_event event)
|
||||||
/* Remove offline mems from this cpuset. */
|
/* Remove offline mems from this cpuset. */
|
||||||
mutex_lock(&callback_mutex);
|
mutex_lock(&callback_mutex);
|
||||||
nodes_and(cp->mems_allowed, cp->mems_allowed,
|
nodes_and(cp->mems_allowed, cp->mems_allowed,
|
||||||
node_states[N_HIGH_MEMORY]);
|
node_states[N_MEMORY]);
|
||||||
mutex_unlock(&callback_mutex);
|
mutex_unlock(&callback_mutex);
|
||||||
|
|
||||||
/* Move tasks from the empty cpuset to a parent */
|
/* Move tasks from the empty cpuset to a parent */
|
||||||
|
@ -2126,8 +2126,8 @@ void cpuset_update_active_cpus(bool cpu_online)
|
||||||
|
|
||||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
/*
|
/*
|
||||||
* Keep top_cpuset.mems_allowed tracking node_states[N_HIGH_MEMORY].
|
* Keep top_cpuset.mems_allowed tracking node_states[N_MEMORY].
|
||||||
* Call this routine anytime after node_states[N_HIGH_MEMORY] changes.
|
* Call this routine anytime after node_states[N_MEMORY] changes.
|
||||||
* See cpuset_update_active_cpus() for CPU hotplug handling.
|
* See cpuset_update_active_cpus() for CPU hotplug handling.
|
||||||
*/
|
*/
|
||||||
static int cpuset_track_online_nodes(struct notifier_block *self,
|
static int cpuset_track_online_nodes(struct notifier_block *self,
|
||||||
|
@ -2140,7 +2140,7 @@ static int cpuset_track_online_nodes(struct notifier_block *self,
|
||||||
case MEM_ONLINE:
|
case MEM_ONLINE:
|
||||||
oldmems = top_cpuset.mems_allowed;
|
oldmems = top_cpuset.mems_allowed;
|
||||||
mutex_lock(&callback_mutex);
|
mutex_lock(&callback_mutex);
|
||||||
top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY];
|
top_cpuset.mems_allowed = node_states[N_MEMORY];
|
||||||
mutex_unlock(&callback_mutex);
|
mutex_unlock(&callback_mutex);
|
||||||
update_tasks_nodemask(&top_cpuset, &oldmems, NULL);
|
update_tasks_nodemask(&top_cpuset, &oldmems, NULL);
|
||||||
break;
|
break;
|
||||||
|
@ -2169,7 +2169,7 @@ static int cpuset_track_online_nodes(struct notifier_block *self,
|
||||||
void __init cpuset_init_smp(void)
|
void __init cpuset_init_smp(void)
|
||||||
{
|
{
|
||||||
cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask);
|
cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask);
|
||||||
top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY];
|
top_cpuset.mems_allowed = node_states[N_MEMORY];
|
||||||
|
|
||||||
hotplug_memory_notifier(cpuset_track_online_nodes, 10);
|
hotplug_memory_notifier(cpuset_track_online_nodes, 10);
|
||||||
|
|
||||||
|
@ -2237,7 +2237,7 @@ void cpuset_init_current_mems_allowed(void)
|
||||||
*
|
*
|
||||||
* Description: Returns the nodemask_t mems_allowed of the cpuset
|
* Description: Returns the nodemask_t mems_allowed of the cpuset
|
||||||
* attached to the specified @tsk. Guaranteed to return some non-empty
|
* attached to the specified @tsk. Guaranteed to return some non-empty
|
||||||
* subset of node_states[N_HIGH_MEMORY], even if this means going outside the
|
* subset of node_states[N_MEMORY], even if this means going outside the
|
||||||
* tasks cpuset.
|
* tasks cpuset.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
|
Reference in New Issue