Commit 3ed80a62 authored by Tejun Heo's avatar Tejun Heo

cgroup: drop module support

With module supported dropped from net_prio, no controller is using
cgroup module support.  None of actual resource controllers can be
built as a module and we aren't gonna add new controllers which don't
control resources.  This patch drops module support from cgroup.

* cgroup_[un]load_subsys() and cgroup_subsys->module removed.

* As there's no point in distinguishing IS_BUILTIN() and IS_MODULE(),
  cgroup_subsys.h now uses IS_ENABLED() directly.

* enum cgroup_subsys_id now exactly matches the list of enabled
  controllers as ordered in cgroup_subsys.h.

* cgroup_subsys[] is now a contiguously occupied array.  Size
  specification is no longer necessary and dropped.

* for_each_builtin_subsys() is removed and for_each_subsys() is
  updated to not require any locking.

* module ref handling is removed from rebind_subsystems().

* Module related comments dropped.

v2: Rebased on top of fe1217c4 ("net: net_cls: move cgroupfs
    classid handling into core").

v3: Added {} around the if (need_forkexit_callback) block in
    cgroup_post_fork() for readability as suggested by Li.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarLi Zefan <lizefan@huawei.com>
parent af636337
...@@ -914,7 +914,6 @@ struct cgroup_subsys blkio_subsys = { ...@@ -914,7 +914,6 @@ struct cgroup_subsys blkio_subsys = {
.can_attach = blkcg_can_attach, .can_attach = blkcg_can_attach,
.subsys_id = blkio_subsys_id, .subsys_id = blkio_subsys_id,
.base_cftypes = blkcg_files, .base_cftypes = blkcg_files,
.module = THIS_MODULE,
}; };
EXPORT_SYMBOL_GPL(blkio_subsys); EXPORT_SYMBOL_GPL(blkio_subsys);
......
...@@ -37,28 +37,13 @@ extern void cgroup_post_fork(struct task_struct *p); ...@@ -37,28 +37,13 @@ extern void cgroup_post_fork(struct task_struct *p);
extern void cgroup_exit(struct task_struct *p, int run_callbacks); extern void cgroup_exit(struct task_struct *p, int run_callbacks);
extern int cgroupstats_build(struct cgroupstats *stats, extern int cgroupstats_build(struct cgroupstats *stats,
struct dentry *dentry); struct dentry *dentry);
extern int cgroup_load_subsys(struct cgroup_subsys *ss);
extern void cgroup_unload_subsys(struct cgroup_subsys *ss);
extern int proc_cgroup_show(struct seq_file *, void *); extern int proc_cgroup_show(struct seq_file *, void *);
/* /* define the enumeration of all cgroup subsystems */
* Define the enumeration of all cgroup subsystems.
*
* We define ids for builtin subsystems and then modular ones.
*/
#define SUBSYS(_x) _x ## _subsys_id, #define SUBSYS(_x) _x ## _subsys_id,
enum cgroup_subsys_id { enum cgroup_subsys_id {
#define IS_SUBSYS_ENABLED(option) IS_BUILTIN(option)
#include <linux/cgroup_subsys.h> #include <linux/cgroup_subsys.h>
#undef IS_SUBSYS_ENABLED
CGROUP_BUILTIN_SUBSYS_COUNT,
__CGROUP_SUBSYS_TEMP_PLACEHOLDER = CGROUP_BUILTIN_SUBSYS_COUNT - 1,
#define IS_SUBSYS_ENABLED(option) IS_MODULE(option)
#include <linux/cgroup_subsys.h>
#undef IS_SUBSYS_ENABLED
CGROUP_SUBSYS_COUNT, CGROUP_SUBSYS_COUNT,
}; };
#undef SUBSYS #undef SUBSYS
...@@ -370,10 +355,9 @@ struct css_set { ...@@ -370,10 +355,9 @@ struct css_set {
struct list_head cgrp_links; struct list_head cgrp_links;
/* /*
* Set of subsystem states, one for each subsystem. This array * Set of subsystem states, one for each subsystem. This array is
* is immutable after creation apart from the init_css_set * immutable after creation apart from the init_css_set during
* during subsystem registration (at boot time) and modular subsystem * subsystem registration (at boot time).
* loading/unloading.
*/ */
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
...@@ -620,15 +604,10 @@ struct cgroup_subsys { ...@@ -620,15 +604,10 @@ struct cgroup_subsys {
/* base cftypes, automatically [de]registered with subsys itself */ /* base cftypes, automatically [de]registered with subsys itself */
struct cftype *base_cftypes; struct cftype *base_cftypes;
struct cftype_set base_cftset; struct cftype_set base_cftset;
/* should be defined only by modular subsystems */
struct module *module;
}; };
#define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys; #define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys;
#define IS_SUBSYS_ENABLED(option) IS_BUILTIN(option)
#include <linux/cgroup_subsys.h> #include <linux/cgroup_subsys.h>
#undef IS_SUBSYS_ENABLED
#undef SUBSYS #undef SUBSYS
/** /**
......
...@@ -3,51 +3,51 @@ ...@@ -3,51 +3,51 @@
* *
* DO NOT ADD ANY SUBSYSTEM WITHOUT EXPLICIT ACKS FROM CGROUP MAINTAINERS. * DO NOT ADD ANY SUBSYSTEM WITHOUT EXPLICIT ACKS FROM CGROUP MAINTAINERS.
*/ */
#if IS_SUBSYS_ENABLED(CONFIG_CPUSETS) #if IS_ENABLED(CONFIG_CPUSETS)
SUBSYS(cpuset) SUBSYS(cpuset)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_DEBUG) #if IS_ENABLED(CONFIG_CGROUP_DEBUG)
SUBSYS(debug) SUBSYS(debug)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_SCHED) #if IS_ENABLED(CONFIG_CGROUP_SCHED)
SUBSYS(cpu_cgroup) SUBSYS(cpu_cgroup)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_CPUACCT) #if IS_ENABLED(CONFIG_CGROUP_CPUACCT)
SUBSYS(cpuacct) SUBSYS(cpuacct)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_MEMCG) #if IS_ENABLED(CONFIG_MEMCG)
SUBSYS(mem_cgroup) SUBSYS(mem_cgroup)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_DEVICE) #if IS_ENABLED(CONFIG_CGROUP_DEVICE)
SUBSYS(devices) SUBSYS(devices)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_FREEZER) #if IS_ENABLED(CONFIG_CGROUP_FREEZER)
SUBSYS(freezer) SUBSYS(freezer)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_NET_CLASSID) #if IS_ENABLED(CONFIG_CGROUP_NET_CLASSID)
SUBSYS(net_cls) SUBSYS(net_cls)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_BLK_CGROUP) #if IS_ENABLED(CONFIG_BLK_CGROUP)
SUBSYS(blkio) SUBSYS(blkio)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_PERF) #if IS_ENABLED(CONFIG_CGROUP_PERF)
SUBSYS(perf) SUBSYS(perf)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_NET_PRIO) #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO)
SUBSYS(net_prio) SUBSYS(net_prio)
#endif #endif
#if IS_SUBSYS_ENABLED(CONFIG_CGROUP_HUGETLB) #if IS_ENABLED(CONFIG_CGROUP_HUGETLB)
SUBSYS(hugetlb) SUBSYS(hugetlb)
#endif #endif
/* /*
......
This diff is collapsed.
...@@ -110,5 +110,4 @@ struct cgroup_subsys net_cls_subsys = { ...@@ -110,5 +110,4 @@ struct cgroup_subsys net_cls_subsys = {
.attach = cgrp_attach, .attach = cgrp_attach,
.subsys_id = net_cls_subsys_id, .subsys_id = net_cls_subsys_id,
.base_cftypes = ss_files, .base_cftypes = ss_files,
.module = THIS_MODULE,
}; };
...@@ -252,7 +252,6 @@ struct cgroup_subsys net_prio_subsys = { ...@@ -252,7 +252,6 @@ struct cgroup_subsys net_prio_subsys = {
.attach = net_prio_attach, .attach = net_prio_attach,
.subsys_id = net_prio_subsys_id, .subsys_id = net_prio_subsys_id,
.base_cftypes = ss_files, .base_cftypes = ss_files,
.module = THIS_MODULE,
}; };
static int netprio_device_event(struct notifier_block *unused, static int netprio_device_event(struct notifier_block *unused,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment