All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiaoming Ni <nixiaoming@huawei.com>
To: <mcgrof@kernel.org>, <keescook@chromium.org>,
	<yzaikin@google.com>, <adobriyan@gmail.com>, <mingo@kernel.org>,
	<peterz@infradead.org>, <akpm@linux-foundation.org>,
	<yamada.masahiro@socionext.com>, <bauerman@linux.ibm.com>,
	<gregkh@linuxfoundation.org>, <skhan@linuxfoundation.org>,
	<dvyukov@google.com>, <svens@stackframe.org>,
	<joel@joelfernandes.org>, <tglx@linutronix.de>,
	<Jisheng.Zhang@synaptics.com>, <pmladek@suse.com>,
	<bigeasy@linutronix.de>
Cc: <linux-kernel@vger.kernel.org>, <linux-fsdevel@vger.kernel.org>,
	<nixiaoming@huawei.com>, <wangle6@huawei.com>
Subject: [PATCH 4/4] sysctl: Add register_sysctl_init() interface
Date: Fri, 15 May 2020 12:33:44 +0800	[thread overview]
Message-ID: <1589517224-123928-5-git-send-email-nixiaoming@huawei.com> (raw)
In-Reply-To: <1589517224-123928-1-git-send-email-nixiaoming@huawei.com>

In order to eliminate the duplicate code for registering the sysctl
interface during the initialization of each feature, add the
register_sysctl_init() interface

Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
---
 include/linux/sysctl.h    |  2 ++
 kernel/hung_task_sysctl.c | 15 +--------------
 kernel/sysctl.c           | 19 +++++++++++++++++++
 kernel/watchdog.c         | 18 +-----------------
 4 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 6d741d6..3cdbe89 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -207,6 +207,8 @@ struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
 void unregister_sysctl_table(struct ctl_table_header * table);
 
 extern int sysctl_init(void);
+extern void register_sysctl_init(const char *path, struct ctl_table *table,
+				 const char *table_name);
 
 extern struct ctl_table sysctl_mount_point[];
 
diff --git a/kernel/hung_task_sysctl.c b/kernel/hung_task_sysctl.c
index 62a51f5..14d2ed6 100644
--- a/kernel/hung_task_sysctl.c
+++ b/kernel/hung_task_sysctl.c
@@ -59,21 +59,8 @@
 	{}
 };
 
-/*
- * The hung task sysctl has a default value.
- * Even if register_sysctl() fails, it does not affect the main function of
- * the hung task. At the same time, during the system initialization phase,
- * malloc small memory will almost never fail.
- * So the return value is ignored here
- */
 void __init hung_task_sysctl_init(void)
 {
-	struct ctl_table_header *srt = register_sysctl("kernel", hung_task_sysctls);
-
-	if (unlikely(!srt)) {
-		pr_err("%s fail\n", __func__);
-		return;
-	}
-	kmemleak_not_leak(srt);
+	register_sysctl_init("kernel", hung_task_sysctls, "hung_task_sysctls");
 }
 
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index e394990..0a09742 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1823,6 +1823,25 @@ int __init sysctl_init(void)
 	return 0;
 }
 
+/*
+ * The sysctl interface is used to modify the interface value,
+ * but the feature interface has default values. Even if register_sysctl fails,
+ * the feature body function can also run. At the same time, malloc small
+ * fragment of memory during the system initialization phase, almost does
+ * not fail. Therefore, the function return is designed as void
+ */
+void __init register_sysctl_init(const char *path, struct ctl_table *table,
+				 const char *table_name)
+{
+	struct ctl_table_header *hdr = register_sysctl(path, table);
+
+	if (unlikely(!hdr)) {
+		pr_err("failed when register_sysctl %s to %s\n", table_name, path);
+		return;
+	}
+	kmemleak_not_leak(hdr);
+}
+
 #endif /* CONFIG_SYSCTL */
 
 /*
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 05e1d58..c1bebb1 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -23,9 +23,6 @@
 #include <linux/sched/debug.h>
 #include <linux/sched/isolation.h>
 #include <linux/stop_machine.h>
-#ifdef CONFIG_SYSCTL
-#include <linux/kmemleak.h>
-#endif
 
 #include <asm/irq_regs.h>
 #include <linux/kvm_para.h>
@@ -853,22 +850,9 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
 	{}
 };
 
-/*
- * The watchdog sysctl has a default value.
- * Even if register_sysctl() fails, it does not affect the main function of
- * the watchdog. At the same time, during the system initialization phase,
- * malloc small memory will almost never fail.
- * So the return value is ignored here
- */
 static void __init watchdog_sysctl_init(void)
 {
-	struct ctl_table_header *p = register_sysctl("kernel", watchdog_sysctls);
-
-	if (unlikely(!p)) {
-		pr_err("%s fail\n", __func__);
-		return;
-	}
-	kmemleak_not_leak(p);
+	register_sysctl_init("kernel", watchdog_sysctls, "watchdog_sysctls");
 }
 #else
 #define watchdog_sysctl_init() do { } while (0)
-- 
1.8.5.6


  parent reply	other threads:[~2020-05-15  4:34 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-15  4:33 [PATCH 0/4] Move the sysctl interface to the corresponding feature code file Xiaoming Ni
2020-05-15  4:33 ` [PATCH 1/4] hung_task: Move hung_task sysctl interface to hung_task_sysctl.c Xiaoming Ni
2020-05-15  8:04   ` Kees Cook
2020-05-15  8:56     ` Xiaoming Ni
2020-05-15 16:03       ` Kees Cook
2020-05-15 20:21         ` Luis Chamberlain
2020-05-15  4:33 ` [PATCH 2/4] proc/sysctl: add shared variables -1 Xiaoming Ni
2020-05-15  8:06   ` Kees Cook
2020-05-15  9:06     ` Xiaoming Ni
2020-05-15 16:05       ` Kees Cook
2020-05-16  2:32         ` Xiaoming Ni
2020-05-16  2:47           ` Kees Cook
2020-05-16  3:05             ` Xiaoming Ni
2020-05-17  2:38               ` Kees Cook
2020-05-15  4:33 ` [PATCH 3/4] watchdog: move watchdog sysctl to watchdog.c Xiaoming Ni
2020-05-15  8:09   ` Kees Cook
2020-05-15  9:17     ` Xiaoming Ni
2020-05-15  4:33 ` Xiaoming Ni [this message]
2020-05-15  8:10   ` [PATCH 4/4] sysctl: Add register_sysctl_init() interface Kees Cook
2020-05-15  9:39     ` Xiaoming Ni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1589517224-123928-5-git-send-email-nixiaoming@huawei.com \
    --to=nixiaoming@huawei.com \
    --cc=Jisheng.Zhang@synaptics.com \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bauerman@linux.ibm.com \
    --cc=bigeasy@linutronix.de \
    --cc=dvyukov@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=joel@joelfernandes.org \
    --cc=keescook@chromium.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=skhan@linuxfoundation.org \
    --cc=svens@stackframe.org \
    --cc=tglx@linutronix.de \
    --cc=wangle6@huawei.com \
    --cc=yamada.masahiro@socionext.com \
    --cc=yzaikin@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.