lkml.org 
[lkml]   [2015]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] watchdog: Add watchdog enable/ disable all functions
    Commit-ID:  b3738d29323344da3017a91010530cf3a58590fc
    Gitweb: http://git.kernel.org/tip/b3738d29323344da3017a91010530cf3a58590fc
    Author: Stephane Eranian <eranian@google.com>
    AuthorDate: Mon, 17 Nov 2014 20:07:03 +0100
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Thu, 2 Apr 2015 17:33:15 +0200

    watchdog: Add watchdog enable/disable all functions

    This patch adds two new functions to enable/disable
    the watchdog across all CPUs.

    This will be used by the HT PMU bug workaround code to
    disable/enable the NMI watchdog across quirk enablement.

    Signed-off-by: Stephane Eranian <eranian@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: bp@alien8.de
    Cc: jolsa@redhat.com
    Cc: kan.liang@intel.com
    Cc: maria.n.dimakopoulou@gmail.com
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Don Zickus <dzickus@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Link: http://lkml.kernel.org/r/1416251225-17721-12-git-send-email-eranian@google.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    include/linux/watchdog.h | 8 ++++++++
    kernel/watchdog.c | 28 ++++++++++++++++++++++++++++
    2 files changed, 36 insertions(+)

    diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
    index 395b70e..a746bf5 100644
    --- a/include/linux/watchdog.h
    +++ b/include/linux/watchdog.h
    @@ -137,4 +137,12 @@ extern int watchdog_init_timeout(struct watchdog_device *wdd,
    extern int watchdog_register_device(struct watchdog_device *);
    extern void watchdog_unregister_device(struct watchdog_device *);

    +#ifdef CONFIG_HARDLOCKUP_DETECTOR
    +void watchdog_nmi_disable_all(void);
    +void watchdog_nmi_enable_all(void);
    +#else
    +static inline void watchdog_nmi_disable_all(void) {}
    +static inline void watchdog_nmi_enable_all(void) {}
    +#endif
    +
    #endif /* ifndef _LINUX_WATCHDOG_H */
    diff --git a/kernel/watchdog.c b/kernel/watchdog.c
    index 3174bf8..9a056f5 100644
    --- a/kernel/watchdog.c
    +++ b/kernel/watchdog.c
    @@ -567,9 +567,37 @@ static void watchdog_nmi_disable(unsigned int cpu)
    cpu0_err = 0;
    }
    }
    +
    +void watchdog_nmi_enable_all(void)
    +{
    + int cpu;
    +
    + if (!watchdog_user_enabled)
    + return;
    +
    + get_online_cpus();
    + for_each_online_cpu(cpu)
    + watchdog_nmi_enable(cpu);
    + put_online_cpus();
    +}
    +
    +void watchdog_nmi_disable_all(void)
    +{
    + int cpu;
    +
    + if (!watchdog_running)
    + return;
    +
    + get_online_cpus();
    + for_each_online_cpu(cpu)
    + watchdog_nmi_disable(cpu);
    + put_online_cpus();
    +}
    #else
    static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
    static void watchdog_nmi_disable(unsigned int cpu) { return; }
    +void watchdog_nmi_enable_all(void) {}
    +void watchdog_nmi_disable_all(void) {}
    #endif /* CONFIG_HARDLOCKUP_DETECTOR */

    static struct smp_hotplug_thread watchdog_threads = {

    \
     
     \ /
      Last update: 2015-04-02 21:21    [W:2.738 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site