timers: Move timer sysctl into the timer code
authortangmeng <tangmeng@uniontech.com>
Tue, 15 Feb 2022 06:50:19 +0000 (14:50 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 10 Apr 2022 10:38:45 +0000 (12:38 +0200)
This is part of the effort to reduce kernel/sysctl.c to only contain the
core logic.

Signed-off-by: tangmeng <tangmeng@uniontech.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220215065019.7520-1-tangmeng@uniontech.com
include/linux/timer.h
kernel/sysctl.c
kernel/time/timer.c

index fda13c9d1256c35f59b45f1f825e13d3ea494adc..648f00105f588dac3e713aab419c21ac8e056e99 100644 (file)
@@ -196,14 +196,6 @@ extern void init_timers(void);
 struct hrtimer;
 extern enum hrtimer_restart it_real_fn(struct hrtimer *);
 
-#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
-struct ctl_table;
-
-extern unsigned int sysctl_timer_migration;
-int timer_migration_handler(struct ctl_table *table, int write,
-                           void *buffer, size_t *lenp, loff_t *ppos);
-#endif
-
 unsigned long __round_jiffies(unsigned long j, int cpu);
 unsigned long __round_jiffies_relative(unsigned long j, int cpu);
 unsigned long round_jiffies(unsigned long j);
index 830aaf8ca08ee0cf3ca5f816fc347a0d4189ba3d..5b7b1a82ae6a4eb34644f488ad3bc976c682bfe0 100644 (file)
@@ -2288,17 +2288,6 @@ static struct ctl_table kern_table[] = {
                .extra1         = SYSCTL_ZERO,
                .extra2         = SYSCTL_ONE,
        },
-#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
-       {
-               .procname       = "timer_migration",
-               .data           = &sysctl_timer_migration,
-               .maxlen         = sizeof(unsigned int),
-               .mode           = 0644,
-               .proc_handler   = timer_migration_handler,
-               .extra1         = SYSCTL_ZERO,
-               .extra2         = SYSCTL_ONE,
-       },
-#endif
 #ifdef CONFIG_BPF_SYSCALL
        {
                .procname       = "unprivileged_bpf_disabled",
index 60aebf2b7f0ac4c912304a3f26893240bab0e537..ef082d43c30799e0dacbec2e2e1a240245f36d20 100644 (file)
@@ -44,6 +44,7 @@
 #include <linux/slab.h>
 #include <linux/compat.h>
 #include <linux/random.h>
+#include <linux/sysctl.h>
 
 #include <linux/uaccess.h>
 #include <asm/unistd.h>
@@ -223,7 +224,7 @@ static void timer_update_keys(struct work_struct *work);
 static DECLARE_WORK(timer_update_work, timer_update_keys);
 
 #ifdef CONFIG_SMP
-unsigned int sysctl_timer_migration = 1;
+static unsigned int sysctl_timer_migration = 1;
 
 DEFINE_STATIC_KEY_FALSE(timers_migration_enabled);
 
@@ -234,7 +235,42 @@ static void timers_update_migration(void)
        else
                static_branch_disable(&timers_migration_enabled);
 }
-#else
+
+#ifdef CONFIG_SYSCTL
+static int timer_migration_handler(struct ctl_table *table, int write,
+                           void *buffer, size_t *lenp, loff_t *ppos)
+{
+       int ret;
+
+       mutex_lock(&timer_keys_mutex);
+       ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+       if (!ret && write)
+               timers_update_migration();
+       mutex_unlock(&timer_keys_mutex);
+       return ret;
+}
+
+static struct ctl_table timer_sysctl[] = {
+       {
+               .procname       = "timer_migration",
+               .data           = &sysctl_timer_migration,
+               .maxlen         = sizeof(unsigned int),
+               .mode           = 0644,
+               .proc_handler   = timer_migration_handler,
+               .extra1         = SYSCTL_ZERO,
+               .extra2         = SYSCTL_ONE,
+       },
+       {}
+};
+
+static int __init timer_sysctl_init(void)
+{
+       register_sysctl("kernel", timer_sysctl);
+       return 0;
+}
+device_initcall(timer_sysctl_init);
+#endif /* CONFIG_SYSCTL */
+#else /* CONFIG_SMP */
 static inline void timers_update_migration(void) { }
 #endif /* !CONFIG_SMP */
 
@@ -251,19 +287,6 @@ void timers_update_nohz(void)
        schedule_work(&timer_update_work);
 }
 
-int timer_migration_handler(struct ctl_table *table, int write,
-                           void *buffer, size_t *lenp, loff_t *ppos)
-{
-       int ret;
-
-       mutex_lock(&timer_keys_mutex);
-       ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
-       if (!ret && write)
-               timers_update_migration();
-       mutex_unlock(&timer_keys_mutex);
-       return ret;
-}
-
 static inline bool is_timers_nohz_active(void)
 {
        return static_branch_unlikely(&timers_nohz_active);