• Douglas Anderson's avatar
    watchdog/hardlockup: add a "cpu" param to watchdog_hardlockup_check() · 77c12fc9
    Douglas Anderson authored
    In preparation for the buddy hardlockup detector where the CPU checking
    for lockup might not be the currently running CPU, add a "cpu" parameter
    to watchdog_hardlockup_check().
    
    As part of this change, make hrtimer_interrupts an atomic_t since now the
    CPU incrementing the value and the CPU reading the value might be
    different.  Technially this could also be done with just READ_ONCE and
    WRITE_ONCE, but atomic_t feels a little cleaner in this case.
    
    While hrtimer_interrupts is made atomic_t, we change
    hrtimer_interrupts_saved from "unsigned long" to "int".  The "int" is
    needed to match the data type backing atomic_t for hrtimer_interrupts. 
    Even if this changes us from 64-bits to 32-bits (which I don't think is
    true for most compilers), it doesn't really matter.  All we ever do is
    increment it every few seconds and compare it to an old value so 32-bits
    is fine (even 16-bits would be).  The "signed" vs "unsigned" also doesn't
    matter for simple equality comparisons.
    
    hrtimer_interrupts_saved is _not_ switched to atomic_t nor even accessed
    with READ_ONCE / WRITE_ONCE.  The hrtimer_interrupts_saved is always
    consistently accessed with the same CPU.  NOTE: with the upcoming "buddy"
    detector there is one special case.  When a CPU goes offline/online then
    we can change which CPU is the one to consistently access a given instance
    of hrtimer_interrupts_saved.  We still can't end up with a partially
    updated hrtimer_interrupts_saved, however, because we end up petting all
    affected CPUs to make sure the new and old CPU can't end up somehow
    read/write hrtimer_interrupts_saved at the same time.
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.10.I3a7d4dd8c23ac30ee0b607d77feb6646b64825c0@changeidSigned-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Colin Cross <ccross@android.com>
    Cc: Daniel Thompson <daniel.thompson@linaro.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Guenter Roeck <groeck@chromium.org>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Lecopzer Chen <lecopzer.chen@mediatek.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masayoshi Mizuma <msys.mizuma@gmail.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Pingfan Liu <kernelfans@gmail.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Ricardo Neri <ricardo.neri@intel.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Stephen Boyd <swboyd@chromium.org>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Cc: Tzung-Bi Shih <tzungbi@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    77c12fc9
watchdog_perf.c 6.82 KB