diff options
Diffstat (limited to 'kernel/cgroup')
| -rw-r--r-- | kernel/cgroup/cpuset.c | 11 | ||||
| -rw-r--r-- | kernel/cgroup/rstat.c | 3 | 
2 files changed, 8 insertions, 6 deletions
| diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index f74d04429a29..27adb04df675 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -280,7 +280,7 @@ static inline void check_insane_mems_config(nodemask_t *nodes)  {  	if (!cpusets_insane_config() &&  		movable_only_nodes(nodes)) { -		static_branch_enable(&cpusets_insane_config_key); +		static_branch_enable_cpuslocked(&cpusets_insane_config_key);  		pr_info("Unsupported (movable nodes only) cpuset configuration detected (nmask=%*pbl)!\n"  			"Cpuset allocations might fail even with a lot of memory available.\n",  			nodemask_pr_args(nodes)); @@ -1843,7 +1843,7 @@ static int update_parent_effective_cpumask(struct cpuset *cs, int cmd,  			if (is_partition_valid(cs))  				adding = cpumask_and(tmp->addmask,  						xcpus, parent->effective_xcpus); -		} else if (is_partition_invalid(cs) && +		} else if (is_partition_invalid(cs) && !cpumask_empty(xcpus) &&  			   cpumask_subset(xcpus, parent->effective_xcpus)) {  			struct cgroup_subsys_state *css;  			struct cpuset *child; @@ -3358,14 +3358,12 @@ static ssize_t cpuset_partition_write(struct kernfs_open_file *of, char *buf,  	else  		return -EINVAL; -	css_get(&cs->css);  	cpus_read_lock();  	mutex_lock(&cpuset_mutex);  	if (is_cpuset_online(cs))  		retval = update_prstate(cs, val);  	mutex_unlock(&cpuset_mutex);  	cpus_read_unlock(); -	css_put(&cs->css);  	return retval ?: nbytes;  } @@ -3870,9 +3868,10 @@ retry:  		partcmd = partcmd_invalidate;  	/*  	 * On the other hand, an invalid partition root may be transitioned -	 * back to a regular one. +	 * back to a regular one with a non-empty effective xcpus.  	 */ -	else if (is_partition_valid(parent) && is_partition_invalid(cs)) +	else if (is_partition_valid(parent) && is_partition_invalid(cs) && +		 !cpumask_empty(cs->effective_xcpus))  		partcmd = partcmd_update;  	if (partcmd >= 0) { diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index 981e2f77ad4e..a198e40c799b 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -479,6 +479,9 @@ void css_rstat_exit(struct cgroup_subsys_state *css)  	if (!css_uses_rstat(css))  		return; +	if (!css->rstat_cpu) +		return; +  	css_rstat_flush(css);  	/* sanity check */ | 
