]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cgroup/cpuset: guard cpuset-v1 code under CONFIG_CPUSETS_V1
authorChen Ridong <chenridong@huawei.com>
Fri, 30 Aug 2024 10:02:28 +0000 (10:02 +0000)
committerTejun Heo <tj@kernel.org>
Fri, 30 Aug 2024 20:00:16 +0000 (10:00 -1000)
This patch introduces CONFIG_CPUSETS_V1 and guard cpuset-v1 code under
CONFIG_CPUSETS_V1. The default value of CONFIG_CPUSETS_V1 is N, so that
user who adopted v2 don't have 'pay' for cpuset v1.

Signed-off-by: Chen Ridong <chenridong@huawei.com>
Acked-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
include/linux/cpuset.h
init/Kconfig
kernel/cgroup/Makefile
kernel/cgroup/cpuset-internal.h
kernel/cgroup/cpuset.c

index 2a6981eeebf885858e463492622225a0474959c5..835e7b793f6a3c3fcbf7fc213e545e3b5cc91b1c 100644 (file)
@@ -99,6 +99,7 @@ static inline bool cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask)
 extern int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
                                          const struct task_struct *tsk2);
 
+#ifdef CONFIG_CPUSETS_V1
 #define cpuset_memory_pressure_bump()                          \
        do {                                                    \
                if (cpuset_memory_pressure_enabled)             \
@@ -106,6 +107,9 @@ extern int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
        } while (0)
 extern int cpuset_memory_pressure_enabled;
 extern void __cpuset_memory_pressure_bump(void);
+#else
+static inline void cpuset_memory_pressure_bump(void) { }
+#endif
 
 extern void cpuset_task_status_allowed(struct seq_file *m,
                                        struct task_struct *task);
index a465ea9525bd590c2b60dd4a4a08c90015bf17f5..8bf091354beae9cb26830af9c3626d94974dfc94 100644 (file)
@@ -1143,6 +1143,19 @@ config CPUSETS
 
          Say N if unsure.
 
+config CPUSETS_V1
+       bool "Legacy cgroup v1 cpusets controller"
+       depends on CPUSETS
+       default n
+       help
+         Legacy cgroup v1 cpusets controller which has been deprecated by
+         cgroup v2 implementation. The v1 is there for legacy applications
+         which haven't migrated to the new cgroup v2 interface yet. If you
+         do not have any such application then you are completely fine leaving
+         this option disabled.
+
+         Say N if unsure.
+
 config PROC_PID_CPUSET
        bool "Include legacy /proc/<pid>/cpuset file"
        depends on CPUSETS
index 005ac4c675cb1fffc04da3c9176badcf2f78c735..a5c9359d516f8f93644174ef79cf02827f300bf9 100644 (file)
@@ -4,6 +4,7 @@ obj-y := cgroup.o rstat.o namespace.o cgroup-v1.o freezer.o
 obj-$(CONFIG_CGROUP_FREEZER) += legacy_freezer.o
 obj-$(CONFIG_CGROUP_PIDS) += pids.o
 obj-$(CONFIG_CGROUP_RDMA) += rdma.o
-obj-$(CONFIG_CPUSETS) += cpuset.o cpuset-v1.o
+obj-$(CONFIG_CPUSETS) += cpuset.o
+obj-$(CONFIG_CPUSETS_V1) += cpuset-v1.o
 obj-$(CONFIG_CGROUP_MISC) += misc.o
 obj-$(CONFIG_CGROUP_DEBUG) += debug.o
index f36419d688bdecf7233a69d382c541851d053405..8c113d46ddd3bb98d27b1a781601420febdae577 100644 (file)
@@ -279,6 +279,7 @@ int cpuset_common_seq_show(struct seq_file *sf, void *v);
 /*
  * cpuset-v1.c
  */
+#ifdef CONFIG_CPUSETS_V1
 extern struct cftype cpuset1_files[];
 void fmeter_init(struct fmeter *fmp);
 void cpuset1_update_task_spread_flags(struct cpuset *cs,
@@ -288,5 +289,16 @@ void cpuset1_hotplug_update_tasks(struct cpuset *cs,
                            struct cpumask *new_cpus, nodemask_t *new_mems,
                            bool cpus_updated, bool mems_updated);
 int cpuset1_validate_change(struct cpuset *cur, struct cpuset *trial);
+#else
+static inline void fmeter_init(struct fmeter *fmp) {}
+static inline void cpuset1_update_task_spread_flags(struct cpuset *cs,
+                                       struct task_struct *tsk) {}
+static inline void cpuset1_update_tasks_flags(struct cpuset *cs) {}
+static inline void cpuset1_hotplug_update_tasks(struct cpuset *cs,
+                           struct cpumask *new_cpus, nodemask_t *new_mems,
+                           bool cpus_updated, bool mems_updated) {}
+static inline int cpuset1_validate_change(struct cpuset *cur,
+                               struct cpuset *trial) { return 0; }
+#endif /* CONFIG_CPUSETS_V1 */
 
 #endif /* __CPUSET_INTERNAL_H */
index c14fe8283a7320aed0b377b556c1c210cfa61b3d..13016ad284a12d715661619e39632882432c2f5c 100644 (file)
@@ -3623,7 +3623,9 @@ struct cgroup_subsys cpuset_cgrp_subsys = {
        .can_fork       = cpuset_can_fork,
        .cancel_fork    = cpuset_cancel_fork,
        .fork           = cpuset_fork,
+#ifdef CONFIG_CPUSETS_V1
        .legacy_cftypes = cpuset1_files,
+#endif
        .dfl_cftypes    = dfl_files,
        .early_init     = true,
        .threaded       = true,