lkml.org 
[lkml]   [2023]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/10] watchdog/buddy: Cleanup how watchdog_buddy_check_hardlockup() is called
    Date
    In the patch ("watchdog/hardlockup: detect hard lockups using
    secondary (buddy) CPUs"), we added a call from the common watchdog.c
    file into the buddy. That call could be done more cleanly.
    Specifically:
    1. If we move the call into watchdog_hardlockup_kick() then it keeps
    watchdog_timer_fn() simpler.
    2. We don't need to pass an "unsigned long" to the buddy for the timer
    count. In the patch ("watchdog/hardlockup: add a "cpu" param to
    watchdog_hardlockup_check()") the count was changed to "atomic_t"
    which is backed by an int, so we should match types.

    Suggested-by: Petr Mladek <pmladek@suse.com>
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    ---

    include/linux/nmi.h | 4 ++--
    kernel/watchdog.c | 15 +++++++--------
    kernel/watchdog_buddy.c | 2 +-
    3 files changed, 10 insertions(+), 11 deletions(-)

    diff --git a/include/linux/nmi.h b/include/linux/nmi.h
    index 6c6a5ce77c66..43893e5f858a 100644
    --- a/include/linux/nmi.h
    +++ b/include/linux/nmi.h
    @@ -114,9 +114,9 @@ void watchdog_hardlockup_disable(unsigned int cpu);
    void lockup_detector_reconfigure(void);

    #ifdef CONFIG_HARDLOCKUP_DETECTOR_BUDDY
    -void watchdog_buddy_check_hardlockup(unsigned long hrtimer_interrupts);
    +void watchdog_buddy_check_hardlockup(int hrtimer_interrupts);
    #else
    -static inline void watchdog_buddy_check_hardlockup(unsigned long hrtimer_interrupts) {}
    +static inline void watchdog_buddy_check_hardlockup(int hrtimer_interrupts) {}
    #endif

    /**
    diff --git a/kernel/watchdog.c b/kernel/watchdog.c
    index 85f4839b6faf..6cc46b8e3d07 100644
    --- a/kernel/watchdog.c
    +++ b/kernel/watchdog.c
    @@ -131,9 +131,12 @@ static bool is_hardlockup(unsigned int cpu)
    return false;
    }

    -static unsigned long watchdog_hardlockup_kick(void)
    +static void watchdog_hardlockup_kick(void)
    {
    - return atomic_inc_return(this_cpu_ptr(&hrtimer_interrupts));
    + int new_interrupts;
    +
    + new_interrupts = atomic_inc_return(this_cpu_ptr(&hrtimer_interrupts));
    + watchdog_buddy_check_hardlockup(new_interrupts);
    }

    void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
    @@ -195,7 +198,7 @@ void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)

    #else /* CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER */

    -static inline unsigned long watchdog_hardlockup_kick(void) { return 0; }
    +static inline void watchdog_hardlockup_kick(void) { }

    #endif /* !CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER */

    @@ -449,15 +452,11 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
    struct pt_regs *regs = get_irq_regs();
    int duration;
    int softlockup_all_cpu_backtrace = sysctl_softlockup_all_cpu_backtrace;
    - unsigned long hrtimer_interrupts;

    if (!watchdog_enabled)
    return HRTIMER_NORESTART;

    - hrtimer_interrupts = watchdog_hardlockup_kick();
    -
    - /* test for hardlockups */
    - watchdog_buddy_check_hardlockup(hrtimer_interrupts);
    + watchdog_hardlockup_kick();

    /* kick the softlockup detector */
    if (completion_done(this_cpu_ptr(&softlockup_completion))) {
    diff --git a/kernel/watchdog_buddy.c b/kernel/watchdog_buddy.c
    index fee45af2e5bd..3ffc5f2ede5a 100644
    --- a/kernel/watchdog_buddy.c
    +++ b/kernel/watchdog_buddy.c
    @@ -72,7 +72,7 @@ void watchdog_hardlockup_disable(unsigned int cpu)
    cpumask_clear_cpu(cpu, &watchdog_cpus);
    }

    -void watchdog_buddy_check_hardlockup(unsigned long hrtimer_interrupts)
    +void watchdog_buddy_check_hardlockup(int hrtimer_interrupts)
    {
    unsigned int next_cpu;

    --
    2.41.0.rc0.172.g3f132b7071-goog
    \
     
     \ /
      Last update: 2023-05-27 03:43    [W:4.312 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site