• Petr Mladek's avatar
    watchdog/hardlockup: declare arch_touch_nmi_watchdog() only in linux/nmi.h · 0c68bda6
    Petr Mladek authored
    arch_touch_nmi_watchdog() needs a different implementation for various
    hardlockup detector implementations. And it does nothing when
    any hardlockup detector is not built at all.
    
    arch_touch_nmi_watchdog() is declared via linux/nmi.h. And it must be
    defined as an empty function when there is no hardlockup detector.
    It is done directly in this header file for the perf and buddy detectors.
    And it is done in the included asm/linux.h for arch specific detectors.
    
    The reason probably is that the arch specific variants build the code
    using another conditions. For example, powerpc64/sparc64 builds the code
    when CONFIG_PPC_WATCHDOG is enabled.
    
    Another reason might be that these architectures define more functions
    in asm/nmi.h anyway.
    
    However the generic code actually knows when the function will be
    implemented. It happens when some full featured or the sparc64-specific
    hardlockup detector is built.
    
    In particular, CONFIG_HARDLOCKUP_DETECTOR can be enabled only when
    a generic or arch-specific full featured hardlockup detector is available.
    The only exception is sparc64 which can be built even when the global
    HARDLOCKUP_DETECTOR switch is disabled.
    
    The information about sparc64 is a bit complicated. The hardlockup
    detector is built there when CONFIG_HAVE_NMI_WATCHDOG is set and
    CONFIG_HAVE_HARDLOCKUP_DETECTOR_ARCH is not set.
    
    People might wonder whether this change really makes things easier.
    The motivation is:
    
      + The current logic in linux/nmi.h is far from obvious.
        For example, arch_touch_nmi_watchdog() is defined as {} when
        neither CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER nor
        CONFIG_HAVE_NMI_WATCHDOG is defined.
    
      + The change synchronizes the checks in lib/Kconfig.debug and
        in the generic code.
    
      + It is a step that will help cleaning HAVE_NMI_WATCHDOG related
        checks.
    
    The change should not change the existing behavior.
    
    Link: https://lkml.kernel.org/r/20230616150618.6073-4-pmladek@suse.comSigned-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    0c68bda6
nmi.h 318 Bytes