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:
Greg Kroah-Hartman
2022-10-12 11:28:08 +02:00
parent ebb55188f7
commit 3fc3fe757f

View File

@@ -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);