aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/watchdog.c
diff options
context:
space:
mode:
authorJoshua Hunt <johunt@akamai.com>2016-03-17 17:17:23 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-03-17 18:09:34 -0400
commita1ee1932aa6bea0bb074f5e3ced112664e4637ed (patch)
tree8a46aa47c4861e0efac06787c5b9189cbbff6d9f /kernel/watchdog.c
parent4c11e554fb894b381a3dc47069259d87a2e6ffc9 (diff)
watchdog: don't run proc_watchdog_update if new value is same as old
While working on a script to restore all sysctl params before a series of tests I found that writing any value into the /proc/sys/kernel/{nmi_watchdog,soft_watchdog,watchdog,watchdog_thresh} causes them to call proc_watchdog_update(). NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter. NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter. NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter. NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter. There doesn't appear to be a reason for doing this work every time a write occurs, so only do it when the values change. Signed-off-by: Josh Hunt <johunt@akamai.com> Acked-by: Don Zickus <dzickus@redhat.com> Reviewed-by: Aaron Tomlin <atomlin@redhat.com> Cc: Ulrich Obergfell <uobergfe@redhat.com> Cc: <stable@vger.kernel.org> [4.1.x+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/watchdog.c')
-rw-r--r--kernel/watchdog.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index b3ace6ebbba3..9acb29f280ec 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -923,6 +923,9 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
923 * both lockup detectors are disabled if proc_watchdog_update() 923 * both lockup detectors are disabled if proc_watchdog_update()
924 * returns an error. 924 * returns an error.
925 */ 925 */
926 if (old == new)
927 goto out;
928
926 err = proc_watchdog_update(); 929 err = proc_watchdog_update();
927 } 930 }
928out: 931out:
@@ -967,7 +970,7 @@ int proc_soft_watchdog(struct ctl_table *table, int write,
967int proc_watchdog_thresh(struct ctl_table *table, int write, 970int proc_watchdog_thresh(struct ctl_table *table, int write,
968 void __user *buffer, size_t *lenp, loff_t *ppos) 971 void __user *buffer, size_t *lenp, loff_t *ppos)
969{ 972{
970 int err, old; 973 int err, old, new;
971 974
972 get_online_cpus(); 975 get_online_cpus();
973 mutex_lock(&watchdog_proc_mutex); 976 mutex_lock(&watchdog_proc_mutex);
@@ -987,6 +990,10 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
987 /* 990 /*
988 * Update the sample period. Restore on failure. 991 * Update the sample period. Restore on failure.
989 */ 992 */
993 new = ACCESS_ONCE(watchdog_thresh);
994 if (old == new)
995 goto out;
996
990 set_sample_period(); 997 set_sample_period();
991 err = proc_watchdog_update(); 998 err = proc_watchdog_update();
992 if (err) { 999 if (err) {