mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
Revert "ANDROID: cpuset: Make cpusets restore on hotplug"
This reverts commit c8dc4422c6. It causes
merge conflicts with 6.1-rc1. If this is still needed in 6.1, it can
come back after 6.1-rc1 is merged.
Bug: 174125747
Bug: 120444281
Cc: Dmitry Shmidt <dimitrysh@google.com>
Cc: Amit Pundir <amit.pundir@linaro.org>
Cc: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I8b040cf6ba360aad710eb462aabf76d87e803b23
This commit is contained in:
@@ -114,7 +114,6 @@ struct cpuset {
|
|||||||
|
|
||||||
/* user-configured CPUs and Memory Nodes allow to tasks */
|
/* user-configured CPUs and Memory Nodes allow to tasks */
|
||||||
cpumask_var_t cpus_allowed;
|
cpumask_var_t cpus_allowed;
|
||||||
cpumask_var_t cpus_requested;
|
|
||||||
nodemask_t mems_allowed;
|
nodemask_t mems_allowed;
|
||||||
|
|
||||||
/* effective CPUs and Memory Nodes allow to tasks */
|
/* effective CPUs and Memory Nodes allow to tasks */
|
||||||
@@ -485,7 +484,7 @@ static void cpuset_update_task_spread_flag(struct cpuset *cs,
|
|||||||
|
|
||||||
static int is_cpuset_subset(const struct cpuset *p, const struct cpuset *q)
|
static int is_cpuset_subset(const struct cpuset *p, const struct cpuset *q)
|
||||||
{
|
{
|
||||||
return cpumask_subset(p->cpus_requested, q->cpus_requested) &&
|
return cpumask_subset(p->cpus_allowed, q->cpus_allowed) &&
|
||||||
nodes_subset(p->mems_allowed, q->mems_allowed) &&
|
nodes_subset(p->mems_allowed, q->mems_allowed) &&
|
||||||
is_cpu_exclusive(p) <= is_cpu_exclusive(q) &&
|
is_cpu_exclusive(p) <= is_cpu_exclusive(q) &&
|
||||||
is_mem_exclusive(p) <= is_mem_exclusive(q);
|
is_mem_exclusive(p) <= is_mem_exclusive(q);
|
||||||
@@ -522,13 +521,8 @@ static inline int alloc_cpumasks(struct cpuset *cs, struct tmpmasks *tmp)
|
|||||||
if (!zalloc_cpumask_var(pmask3, GFP_KERNEL))
|
if (!zalloc_cpumask_var(pmask3, GFP_KERNEL))
|
||||||
goto free_two;
|
goto free_two;
|
||||||
|
|
||||||
if (cs && !zalloc_cpumask_var(&cs->cpus_requested, GFP_KERNEL))
|
|
||||||
goto free_three;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free_three:
|
|
||||||
free_cpumask_var(*pmask3);
|
|
||||||
free_two:
|
free_two:
|
||||||
free_cpumask_var(*pmask2);
|
free_cpumask_var(*pmask2);
|
||||||
free_one:
|
free_one:
|
||||||
@@ -545,7 +539,6 @@ static inline void free_cpumasks(struct cpuset *cs, struct tmpmasks *tmp)
|
|||||||
{
|
{
|
||||||
if (cs) {
|
if (cs) {
|
||||||
free_cpumask_var(cs->cpus_allowed);
|
free_cpumask_var(cs->cpus_allowed);
|
||||||
free_cpumask_var(cs->cpus_requested);
|
|
||||||
free_cpumask_var(cs->effective_cpus);
|
free_cpumask_var(cs->effective_cpus);
|
||||||
free_cpumask_var(cs->subparts_cpus);
|
free_cpumask_var(cs->subparts_cpus);
|
||||||
}
|
}
|
||||||
@@ -574,7 +567,6 @@ static struct cpuset *alloc_trial_cpuset(struct cpuset *cs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cpumask_copy(trial->cpus_allowed, cs->cpus_allowed);
|
cpumask_copy(trial->cpus_allowed, cs->cpus_allowed);
|
||||||
cpumask_copy(trial->cpus_requested, cs->cpus_requested);
|
|
||||||
cpumask_copy(trial->effective_cpus, cs->effective_cpus);
|
cpumask_copy(trial->effective_cpus, cs->effective_cpus);
|
||||||
return trial;
|
return trial;
|
||||||
}
|
}
|
||||||
@@ -665,7 +657,7 @@ static int validate_change(struct cpuset *cur, struct cpuset *trial)
|
|||||||
cpuset_for_each_child(c, css, par) {
|
cpuset_for_each_child(c, css, par) {
|
||||||
if ((is_cpu_exclusive(trial) || is_cpu_exclusive(c)) &&
|
if ((is_cpu_exclusive(trial) || is_cpu_exclusive(c)) &&
|
||||||
c != cur &&
|
c != cur &&
|
||||||
cpumask_intersects(trial->cpus_requested, c->cpus_requested))
|
cpumask_intersects(trial->cpus_allowed, c->cpus_allowed))
|
||||||
goto out;
|
goto out;
|
||||||
if ((is_mem_exclusive(trial) || is_mem_exclusive(c)) &&
|
if ((is_mem_exclusive(trial) || is_mem_exclusive(c)) &&
|
||||||
c != cur &&
|
c != cur &&
|
||||||
@@ -1162,10 +1154,10 @@ static void compute_effective_cpumask(struct cpumask *new_cpus,
|
|||||||
if (parent->nr_subparts_cpus) {
|
if (parent->nr_subparts_cpus) {
|
||||||
cpumask_or(new_cpus, parent->effective_cpus,
|
cpumask_or(new_cpus, parent->effective_cpus,
|
||||||
parent->subparts_cpus);
|
parent->subparts_cpus);
|
||||||
cpumask_and(new_cpus, new_cpus, cs->cpus_requested);
|
cpumask_and(new_cpus, new_cpus, cs->cpus_allowed);
|
||||||
cpumask_and(new_cpus, new_cpus, cpu_active_mask);
|
cpumask_and(new_cpus, new_cpus, cpu_active_mask);
|
||||||
} else {
|
} else {
|
||||||
cpumask_and(new_cpus, cs->cpus_requested, parent_cs(cs)->effective_cpus);
|
cpumask_and(new_cpus, cs->cpus_allowed, parent->effective_cpus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1605,26 +1597,25 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs,
|
|||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An empty cpus_requested is ok only if the cpuset has no tasks.
|
* An empty cpus_allowed is ok only if the cpuset has no tasks.
|
||||||
* Since cpulist_parse() fails on an empty mask, we special case
|
* Since cpulist_parse() fails on an empty mask, we special case
|
||||||
* that parsing. The validate_change() call ensures that cpusets
|
* that parsing. The validate_change() call ensures that cpusets
|
||||||
* with tasks have cpus.
|
* with tasks have cpus.
|
||||||
*/
|
*/
|
||||||
if (!*buf) {
|
if (!*buf) {
|
||||||
cpumask_clear(trialcs->cpus_requested);
|
cpumask_clear(trialcs->cpus_allowed);
|
||||||
} else {
|
} else {
|
||||||
retval = cpulist_parse(buf, trialcs->cpus_requested);
|
retval = cpulist_parse(buf, trialcs->cpus_allowed);
|
||||||
if (retval < 0)
|
if (retval < 0)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
if (!cpumask_subset(trialcs->cpus_allowed,
|
||||||
|
top_cpuset.cpus_allowed))
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cpumask_subset(trialcs->cpus_requested, cpu_present_mask))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
cpumask_and(trialcs->cpus_allowed, trialcs->cpus_requested, cpu_active_mask);
|
|
||||||
|
|
||||||
/* Nothing to do if the cpus didn't change */
|
/* Nothing to do if the cpus didn't change */
|
||||||
if (cpumask_equal(cs->cpus_requested, trialcs->cpus_requested))
|
if (cpumask_equal(cs->cpus_allowed, trialcs->cpus_allowed))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
retval = validate_change(cs, trialcs);
|
retval = validate_change(cs, trialcs);
|
||||||
@@ -1652,7 +1643,6 @@ static int update_cpumask(struct cpuset *cs, struct cpuset *trialcs,
|
|||||||
|
|
||||||
spin_lock_irq(&callback_lock);
|
spin_lock_irq(&callback_lock);
|
||||||
cpumask_copy(cs->cpus_allowed, trialcs->cpus_allowed);
|
cpumask_copy(cs->cpus_allowed, trialcs->cpus_allowed);
|
||||||
cpumask_copy(cs->cpus_requested, trialcs->cpus_requested);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure that subparts_cpus is a subset of cpus_allowed.
|
* Make sure that subparts_cpus is a subset of cpus_allowed.
|
||||||
@@ -2540,7 +2530,7 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v)
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case FILE_CPULIST:
|
case FILE_CPULIST:
|
||||||
seq_printf(sf, "%*pbl\n", cpumask_pr_args(cs->cpus_requested));
|
seq_printf(sf, "%*pbl\n", cpumask_pr_args(cs->cpus_allowed));
|
||||||
break;
|
break;
|
||||||
case FILE_MEMLIST:
|
case FILE_MEMLIST:
|
||||||
seq_printf(sf, "%*pbl\n", nodemask_pr_args(&cs->mems_allowed));
|
seq_printf(sf, "%*pbl\n", nodemask_pr_args(&cs->mems_allowed));
|
||||||
@@ -2914,7 +2904,6 @@ static int cpuset_css_online(struct cgroup_subsys_state *css)
|
|||||||
cs->mems_allowed = parent->mems_allowed;
|
cs->mems_allowed = parent->mems_allowed;
|
||||||
cs->effective_mems = parent->mems_allowed;
|
cs->effective_mems = parent->mems_allowed;
|
||||||
cpumask_copy(cs->cpus_allowed, parent->cpus_allowed);
|
cpumask_copy(cs->cpus_allowed, parent->cpus_allowed);
|
||||||
cpumask_copy(cs->cpus_requested, parent->cpus_requested);
|
|
||||||
cpumask_copy(cs->effective_cpus, parent->cpus_allowed);
|
cpumask_copy(cs->effective_cpus, parent->cpus_allowed);
|
||||||
spin_unlock_irq(&callback_lock);
|
spin_unlock_irq(&callback_lock);
|
||||||
out_unlock:
|
out_unlock:
|
||||||
@@ -3031,10 +3020,8 @@ int __init cpuset_init(void)
|
|||||||
BUG_ON(!alloc_cpumask_var(&top_cpuset.cpus_allowed, GFP_KERNEL));
|
BUG_ON(!alloc_cpumask_var(&top_cpuset.cpus_allowed, GFP_KERNEL));
|
||||||
BUG_ON(!alloc_cpumask_var(&top_cpuset.effective_cpus, GFP_KERNEL));
|
BUG_ON(!alloc_cpumask_var(&top_cpuset.effective_cpus, GFP_KERNEL));
|
||||||
BUG_ON(!zalloc_cpumask_var(&top_cpuset.subparts_cpus, GFP_KERNEL));
|
BUG_ON(!zalloc_cpumask_var(&top_cpuset.subparts_cpus, GFP_KERNEL));
|
||||||
BUG_ON(!alloc_cpumask_var(&top_cpuset.cpus_requested, GFP_KERNEL));
|
|
||||||
|
|
||||||
cpumask_setall(top_cpuset.cpus_allowed);
|
cpumask_setall(top_cpuset.cpus_allowed);
|
||||||
cpumask_setall(top_cpuset.cpus_requested);
|
|
||||||
nodes_setall(top_cpuset.mems_allowed);
|
nodes_setall(top_cpuset.mems_allowed);
|
||||||
cpumask_setall(top_cpuset.effective_cpus);
|
cpumask_setall(top_cpuset.effective_cpus);
|
||||||
nodes_setall(top_cpuset.effective_mems);
|
nodes_setall(top_cpuset.effective_mems);
|
||||||
|
|||||||
Reference in New Issue
Block a user