• Petr Mladek's avatar
    watchdog/hardlockup: make the config checks more straightforward · 1356d0b9
    Petr Mladek authored
    There are four possible variants of hardlockup detectors:
    
      + buddy: available when SMP is set.
    
      + perf: available when HAVE_HARDLOCKUP_DETECTOR_PERF is set.
    
      + arch-specific: available when HAVE_HARDLOCKUP_DETECTOR_ARCH is set.
    
      + sparc64 special variant: available when HAVE_NMI_WATCHDOG is set
    	and HAVE_HARDLOCKUP_DETECTOR_ARCH is not set.
    
    The check for the sparc64 variant is more complicated because
    HAVE_NMI_WATCHDOG is used to #ifdef code used by both arch-specific
    and sparc64 specific variant. Therefore it is automatically
    selected with HAVE_HARDLOCKUP_DETECTOR_ARCH.
    
    This complexity is partly hidden in HAVE_HARDLOCKUP_DETECTOR_NON_ARCH.
    It reduces the size of some checks but it makes them harder to follow.
    
    Finally, the other temporary variable HARDLOCKUP_DETECTOR_NON_ARCH
    is used to re-compute HARDLOCKUP_DETECTOR_PERF/BUDDY when the global
    HARDLOCKUP_DETECTOR switch is enabled/disabled.
    
    Make the logic more straightforward by the following changes:
    
      + Better explain the role of HAVE_HARDLOCKUP_DETECTOR_ARCH and
        HAVE_NMI_WATCHDOG in comments.
    
      + Add HAVE_HARDLOCKUP_DETECTOR_BUDDY so that there is separate
        HAVE_* for all four hardlockup detector variants.
    
        Use it in the other conditions instead of SMP. It makes it
        clear that it is about the buddy detector.
    
      + Open code HAVE_HARDLOCKUP_DETECTOR_NON_ARCH in HARDLOCKUP_DETECTOR
        and HARDLOCKUP_DETECTOR_PREFER_BUDDY. It helps to understand
        the conditions between the four hardlockup detector variants.
    
      + Define the exact conditions when HARDLOCKUP_DETECTOR_PERF/BUDDY
        can be enabled. It explains the dependency on the other
        hardlockup detector variants.
    
        Also it allows to remove HARDLOCKUP_DETECTOR_NON_ARCH by using "imply".
        It triggers re-evaluating HARDLOCKUP_DETECTOR_PERF/BUDDY when
        the global HARDLOCKUP_DETECTOR switch is changed.
    
      + Add dependency on HARDLOCKUP_DETECTOR so that the affected variables
        disappear when the hardlockup detectors are disabled.
    
        Another nice side effect is that HARDLOCKUP_DETECTOR_PREFER_BUDDY
        value is not preserved when the global switch is disabled.
        The user has to make the decision again when it gets re-enabled.
    
    Link: https://lkml.kernel.org/r/20230616150618.6073-3-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>
    1356d0b9
Kconfig 44.9 KB