diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-11 20:10:05 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-11 20:10:05 -0500 |
commit | 085bec853afdbf3edf1b554defaac606a7e3f0c2 (patch) | |
tree | 130711ffc0da2b519b564bbb7bd3aebdaed3a6e8 | |
parent | 72dd379e67fb6c4f4b0ed8ee36e9fed78227f352 (diff) | |
parent | c2f31b79d510ec1a27138bdcf2d0ece1080be85e (diff) |
Merge branch 'for-4.15-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup fixes from Tejun Heo:
- Prateek posted a couple patches to fix a deadlock involving cpuset
and workqueue. It unfortunately caused a different deadlock and the
recent workqueue hotplug simplification removed the original
deadlock, so Prateek's two patches are reverted for now.
- The new stat code was missing u64_stats initialization. Fixed.
- Doc and other misc changes
* 'for-4.15-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
cgroup: add warning about RT not being supported on cgroup2
Revert "cgroup/cpuset: remove circular dependency deadlock"
Revert "cpuset: Make cpuset hotplug synchronous"
cgroup: properly init u64_stats
debug cgroup: use task_css_set instead of rcu_dereference
cpuset: Make cpuset hotplug synchronous
cgroup/cpuset: remove circular dependency deadlock
-rw-r--r-- | Documentation/cgroup-v2.txt | 7 | ||||
-rw-r--r-- | kernel/cgroup/debug.c | 4 | ||||
-rw-r--r-- | kernel/cgroup/stat.c | 8 |
3 files changed, 15 insertions, 4 deletions
diff --git a/Documentation/cgroup-v2.txt b/Documentation/cgroup-v2.txt index 779211fbb69f..2cddab7efb20 100644 --- a/Documentation/cgroup-v2.txt +++ b/Documentation/cgroup-v2.txt | |||
@@ -898,6 +898,13 @@ controller implements weight and absolute bandwidth limit models for | |||
898 | normal scheduling policy and absolute bandwidth allocation model for | 898 | normal scheduling policy and absolute bandwidth allocation model for |
899 | realtime scheduling policy. | 899 | realtime scheduling policy. |
900 | 900 | ||
901 | WARNING: cgroup2 doesn't yet support control of realtime processes and | ||
902 | the cpu controller can only be enabled when all RT processes are in | ||
903 | the root cgroup. Be aware that system management software may already | ||
904 | have placed RT processes into nonroot cgroups during the system boot | ||
905 | process, and these processes may need to be moved to the root cgroup | ||
906 | before the cpu controller can be enabled. | ||
907 | |||
901 | 908 | ||
902 | CPU Interface Files | 909 | CPU Interface Files |
903 | ~~~~~~~~~~~~~~~~~~~ | 910 | ~~~~~~~~~~~~~~~~~~~ |
diff --git a/kernel/cgroup/debug.c b/kernel/cgroup/debug.c index 5f780d8f6a9d..9caeda610249 100644 --- a/kernel/cgroup/debug.c +++ b/kernel/cgroup/debug.c | |||
@@ -50,7 +50,7 @@ static int current_css_set_read(struct seq_file *seq, void *v) | |||
50 | 50 | ||
51 | spin_lock_irq(&css_set_lock); | 51 | spin_lock_irq(&css_set_lock); |
52 | rcu_read_lock(); | 52 | rcu_read_lock(); |
53 | cset = rcu_dereference(current->cgroups); | 53 | cset = task_css_set(current); |
54 | refcnt = refcount_read(&cset->refcount); | 54 | refcnt = refcount_read(&cset->refcount); |
55 | seq_printf(seq, "css_set %pK %d", cset, refcnt); | 55 | seq_printf(seq, "css_set %pK %d", cset, refcnt); |
56 | if (refcnt > cset->nr_tasks) | 56 | if (refcnt > cset->nr_tasks) |
@@ -96,7 +96,7 @@ static int current_css_set_cg_links_read(struct seq_file *seq, void *v) | |||
96 | 96 | ||
97 | spin_lock_irq(&css_set_lock); | 97 | spin_lock_irq(&css_set_lock); |
98 | rcu_read_lock(); | 98 | rcu_read_lock(); |
99 | cset = rcu_dereference(current->cgroups); | 99 | cset = task_css_set(current); |
100 | list_for_each_entry(link, &cset->cgrp_links, cgrp_link) { | 100 | list_for_each_entry(link, &cset->cgrp_links, cgrp_link) { |
101 | struct cgroup *c = link->cgrp; | 101 | struct cgroup *c = link->cgrp; |
102 | 102 | ||
diff --git a/kernel/cgroup/stat.c b/kernel/cgroup/stat.c index 133b465691d6..1e111dd455c4 100644 --- a/kernel/cgroup/stat.c +++ b/kernel/cgroup/stat.c | |||
@@ -296,8 +296,12 @@ int cgroup_stat_init(struct cgroup *cgrp) | |||
296 | } | 296 | } |
297 | 297 | ||
298 | /* ->updated_children list is self terminated */ | 298 | /* ->updated_children list is self terminated */ |
299 | for_each_possible_cpu(cpu) | 299 | for_each_possible_cpu(cpu) { |
300 | cgroup_cpu_stat(cgrp, cpu)->updated_children = cgrp; | 300 | struct cgroup_cpu_stat *cstat = cgroup_cpu_stat(cgrp, cpu); |
301 | |||
302 | cstat->updated_children = cgrp; | ||
303 | u64_stats_init(&cstat->sync); | ||
304 | } | ||
301 | 305 | ||
302 | prev_cputime_init(&cgrp->stat.prev_cputime); | 306 | prev_cputime_init(&cgrp->stat.prev_cputime); |
303 | 307 | ||