Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2422125ybk; Sun, 17 May 2020 21:23:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJynlh9HOPC0a75dO5GG4cgbfoPP4XWTH9DogbIv2Rt3MvIpzqxV9Sw9VCQ9EToev/D4vt5L X-Received: by 2002:a50:9eac:: with SMTP id a41mr12462999edf.120.1589775824521; Sun, 17 May 2020 21:23:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589775824; cv=none; d=google.com; s=arc-20160816; b=NsLiyLPzSeJg6lbeJaqsXwxEjO9XOPri+cL4xPPj8vQsT/BtdkcVukf1VpRRlK+XyL Tnym8i8xBi8FcI3rbtUQEQKWYAWyE70s59FBs/tDkjP72wEBUnZChyzWwn5+Uu/dVCPy p1Zl0fBo9360/Q30MezOmzg81CmpyesZoZpc2o74Er99t7pjYWc2+8IaRq24ufD3t5bS 0ipIv9ZGuBOGaedA0PTJPYT4q7rqhfQEwvrhaLGLRPdgCNU08ZJTZ3jZQFQQAKc07FxK vAVYbY8DqSAvTQDCkN/Pq9D4YK97C/C1T4+g20Iei/vdrxl6OsIVlhMCGp2l1qVo8KIf Dyhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=6r6lrU4ErkHSo2dJSeMQ1N+zmjFHBrHnuaFTW2BkXEA=; b=kIojgiovi4pmJJBJDqhzfyLST4KIAoseisMaHXHRSdjTLhCFJFS0ESAWmCUhYeKkip MX2lUeK29EMsVYXLOhHm/P310Omkw3WqNV75VQHyWRgnLGpJyEhBUlPgCSBqO6Q5x2vJ /fZwsKLOd2TgfeAbo+yVA42TU/r2cNYPqbPJJu00W2De2DZ/Va9njHsT63KRsFQ3IMFL y6xtAp3XPH0Mvj6+Hf5u5vJb/46yYjDvXY/rN5Kl5M56BDqZOkPCummCrfjfKDY/y7tj gYAS3dOOI3jS+ORJrcWHNeidG3Z+S6z8CgipEOczyD83vyo1JKApcFtyNAMYB0HJLxn0 YMyg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p92si5706793edd.321.2020.05.17.21.23.21; Sun, 17 May 2020 21:23:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726502AbgEREAQ (ORCPT + 99 others); Mon, 18 May 2020 00:00:16 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:58160 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726053AbgEREAM (ORCPT ); Mon, 18 May 2020 00:00:12 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 90BB74870029CCCDB0E1; Mon, 18 May 2020 12:00:09 +0800 (CST) Received: from use12-sp2.huawei.com (10.67.189.174) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.487.0; Mon, 18 May 2020 12:00:00 +0800 From: Xiaoming Ni To: , , , , , , , , , , , , , , CC: , , Subject: [PATCH v3 3/4] hung_task: Move hung_task sysctl interface to hung_task.c Date: Mon, 18 May 2020 11:59:56 +0800 Message-ID: <1589774397-42485-4-git-send-email-nixiaoming@huawei.com> X-Mailer: git-send-email 1.8.5.6 In-Reply-To: <1589774397-42485-1-git-send-email-nixiaoming@huawei.com> References: <1589774397-42485-1-git-send-email-nixiaoming@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.189.174] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move hung_task sysctl interface to hung_task.c. Use register_sysctl() to register the sysctl interface to avoid merge conflicts when different features modify sysctl.c at the same time. Signed-off-by: Xiaoming Ni Reviewed-by: Kees Cook --- include/linux/sched/sysctl.h | 8 +----- kernel/hung_task.c | 63 +++++++++++++++++++++++++++++++++++++++++++- kernel/sysctl.c | 50 ----------------------------------- 3 files changed, 63 insertions(+), 58 deletions(-) diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h index d4f6215..c075e09 100644 --- a/include/linux/sched/sysctl.h +++ b/include/linux/sched/sysctl.h @@ -7,14 +7,8 @@ struct ctl_table; #ifdef CONFIG_DETECT_HUNG_TASK -extern int sysctl_hung_task_check_count; -extern unsigned int sysctl_hung_task_panic; +/* used for hung_task and block/ */ extern unsigned long sysctl_hung_task_timeout_secs; -extern unsigned long sysctl_hung_task_check_interval_secs; -extern int sysctl_hung_task_warnings; -extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, - void __user *buffer, - size_t *lenp, loff_t *ppos); #else /* Avoid need for ifdefs elsewhere in the code */ enum { sysctl_hung_task_timeout_secs = 0 }; diff --git a/kernel/hung_task.c b/kernel/hung_task.c index 14a625c..d010c96 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -215,10 +215,11 @@ static long hung_timeout_jiffies(unsigned long last_checked, MAX_SCHEDULE_TIMEOUT; } +#ifdef CONFIG_SYSCTL /* * Process updating of timeout sysctl */ -int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, +static int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -235,6 +236,65 @@ int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, return ret; } +/* + * This is needed for proc_doulongvec_minmax of sysctl_hung_task_timeout_secs + * and hung_task_check_interval_secs + */ +static const unsigned long hung_task_timeout_max = (LONG_MAX / HZ); +static struct ctl_table hung_task_sysctls[] = { + { + .procname = "hung_task_panic", + .data = &sysctl_hung_task_panic, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE, + }, + { + .procname = "hung_task_check_count", + .data = &sysctl_hung_task_check_count, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + }, + { + .procname = "hung_task_timeout_secs", + .data = &sysctl_hung_task_timeout_secs, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = proc_dohung_task_timeout_secs, + .extra2 = (void *)&hung_task_timeout_max, + }, + { + .procname = "hung_task_check_interval_secs", + .data = &sysctl_hung_task_check_interval_secs, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = proc_dohung_task_timeout_secs, + .extra2 = (void *)&hung_task_timeout_max, + }, + { + .procname = "hung_task_warnings", + .data = &sysctl_hung_task_warnings, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_NEG_ONE, + }, + {} +}; + +static void __init hung_task_sysctl_init(void) +{ + register_sysctl_init("kernel", hung_task_sysctls, "hung_task_sysctls"); +} +#else +#define hung_task_sysctl_init() do { } while (0) +#endif + + static atomic_t reset_hung_task = ATOMIC_INIT(0); void reset_hung_task_detector(void) @@ -304,6 +364,7 @@ static int __init hung_task_init(void) pm_notifier(hungtask_pm_notify, 0); watchdog_task = kthread_run(watchdog, NULL, "khungtaskd"); + hung_task_sysctl_init(); return 0; } diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 76c3237..90e3ea8 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -144,13 +144,6 @@ static int ngroups_max = NGROUPS_MAX; static const int cap_last_cap = CAP_LAST_CAP; -/* - * This is needed for proc_doulongvec_minmax of sysctl_hung_task_timeout_secs - * and hung_task_check_interval_secs - */ -#ifdef CONFIG_DETECT_HUNG_TASK -static unsigned long hung_task_timeout_max = (LONG_MAX/HZ); -#endif #ifdef CONFIG_INOTIFY_USER #include @@ -1080,49 +1073,6 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, .proc_handler = proc_dointvec, }, #endif -#ifdef CONFIG_DETECT_HUNG_TASK - { - .procname = "hung_task_panic", - .data = &sysctl_hung_task_panic, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = proc_dointvec_minmax, - .extra1 = SYSCTL_ZERO, - .extra2 = SYSCTL_ONE, - }, - { - .procname = "hung_task_check_count", - .data = &sysctl_hung_task_check_count, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = proc_dointvec_minmax, - .extra1 = SYSCTL_ZERO, - }, - { - .procname = "hung_task_timeout_secs", - .data = &sysctl_hung_task_timeout_secs, - .maxlen = sizeof(unsigned long), - .mode = 0644, - .proc_handler = proc_dohung_task_timeout_secs, - .extra2 = &hung_task_timeout_max, - }, - { - .procname = "hung_task_check_interval_secs", - .data = &sysctl_hung_task_check_interval_secs, - .maxlen = sizeof(unsigned long), - .mode = 0644, - .proc_handler = proc_dohung_task_timeout_secs, - .extra2 = &hung_task_timeout_max, - }, - { - .procname = "hung_task_warnings", - .data = &sysctl_hung_task_warnings, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = proc_dointvec_minmax, - .extra1 = &neg_one, - }, -#endif #ifdef CONFIG_RT_MUTEXES { .procname = "max_lock_depth", -- 1.8.5.6