Hi, On Fri, Jun 16, 2023 at 8:07 AM Petr Mladek <pmladek@xxxxxxxx> wrote: > > There are several hardlockup detector implementations and several Kconfig > values which allow selection and build of the preferred one. > > CONFIG_HARDLOCKUP_DETECTOR was introduced by the commit 23637d477c1f53acb > ("lockup_detector: Introduce CONFIG_HARDLOCKUP_DETECTOR") in v2.6.36. > It was a preparation step for introducing the new generic perf hardlockup > detector. > > The existing arch-specific variants did not support the to-be-created > generic build configurations, sysctl interface, etc. This distinction > was made explicit by the commit 4a7863cc2eb5f98 ("x86, nmi_watchdog: > Remove ARCH_HAS_NMI_WATCHDOG and rely on CONFIG_HARDLOCKUP_DETECTOR") > in v2.6.38. > > CONFIG_HAVE_NMI_WATCHDOG was introduced by the commit d314d74c695f967e105 > ("nmi watchdog: do not use cpp symbol in Kconfig") in v3.4-rc1. It replaced > the above mentioned ARCH_HAS_NMI_WATCHDOG. At that time, it was still used > by three architectures, namely blackfin, mn10300, and sparc. > > The support for blackfin and mn10300 architectures has been completely > dropped some time ago. And sparc is the only architecture with the historic > NMI watchdog at the moment. > > And the old sparc implementation is really special. It is always built on > sparc64. It used to be always enabled until the commit 7a5c8b57cec93196b > ("sparc: implement watchdog_nmi_enable and watchdog_nmi_disable") added > in v4.10-rc1. > > There are only few locations where the sparc64 NMI watchdog interacts > with the generic hardlockup detectors code: > > + implements arch_touch_nmi_watchdog() which is called from the generic > touch_nmi_watchdog() > > + implements watchdog_hardlockup_enable()/disable() to support > /proc/sys/kernel/nmi_watchdog > > + is always preferred over other generic watchdogs, see > CONFIG_HARDLOCKUP_DETECTOR > > + includes asm/nmi.h into linux/nmi.h because some sparc-specific > functions are needed in sparc-specific code which includes > only linux/nmi.h. > > The situation became more complicated after the commit 05a4a95279311c3 > ("kernel/watchdog: split up config options") and commit 2104180a53698df5 > ("powerpc/64s: implement arch-specific hardlockup watchdog") in v4.13-rc1. > They introduced HAVE_HARDLOCKUP_DETECTOR_ARCH. It was used for powerpc > specific hardlockup detector. It was compatible with the perf one > regarding the general boot, sysctl, and programming interfaces. > > HAVE_HARDLOCKUP_DETECTOR_ARCH was defined as a superset of > HAVE_NMI_WATCHDOG. It made some sense because all arch-specific > detectors had some common requirements, namely: > > + implemented arch_touch_nmi_watchdog() > + included asm/nmi.h into linux/nmi.h > + defined the default value for /proc/sys/kernel/nmi_watchdog > > But it actually has made things pretty complicated when the generic > buddy hardlockup detector was added. Before the generic perf detector > was newer supported together with an arch-specific one. But the buddy > detector could work on any SMP system. It means that an architecture > could support both the arch-specific and buddy detector. > > As a result, there are few tricky dependencies. For example, > CONFIG_HARDLOCKUP_DETECTOR depends on: > > ((HAVE_HARDLOCKUP_DETECTOR_PERF || HAVE_HARDLOCKUP_DETECTOR_BUDDY) && !HAVE_NMI_WATCHDOG) || HAVE_HARDLOCKUP_DETECTOR_ARCH > > The problem is that the very special sparc implementation is defined as: > > HAVE_NMI_WATCHDOG && !HAVE_HARDLOCKUP_DETECTOR_ARCH > > Another problem is that the meaning of HAVE_NMI_WATCHDOG is far from clear > without reading understanding the history. > > Make the logic less tricky and more self-explanatory by making > HAVE_NMI_WATCHDOG specific for the sparc64 implementation. And rename it to > HAVE_HARDLOCKUP_DETECTOR_SPARC64. > > Note that HARDLOCKUP_DETECTOR_PREFER_BUDDY, HARDLOCKUP_DETECTOR_PERF, > and HARDLOCKUP_DETECTOR_BUDDY may conflict only with > HAVE_HARDLOCKUP_DETECTOR_ARCH. They depend on HARDLOCKUP_DETECTOR > and it is not longer enabled when HAVE_NMI_WATCHDOG is set. > > Signed-off-by: Petr Mladek <pmladek@xxxxxxxx> > > watchdog/sparc64: Rename HAVE_NMI_WATCHDOG to HAVE_HARDLOCKUP_WATCHDOG_SPARC64 > > The configuration variable HAVE_NMI_WATCHDOG has a generic name but > it is selected only for SPARC64. > > It should _not_ be used in general because it is not integrated with > the other hardlockup detectors. Namely, it does not support the hardlockup > specific command line parameters and systcl interface. Instead, it is > enabled/disabled together with the softlockup detector by the global > "watchdog" sysctl. > > Rename it to HAVE_HARDLOCKUP_WATCHDOG_SPARC64 to make the special > behavior more clear. > > Also the variable is set only on sparc64. Move the definition > from arch/Kconfig to arch/sparc/Kconfig.debug. > > Signed-off-by: Petr Mladek <pmladek@xxxxxxxx> I think you goofed up when squashing the patches. You've now got a second patch subject after your first Signed-off-by and then a second Signed-off-by... I assume everything after the first Signed-off-by should be dropped? Other than that: Reviewed-by: Douglas Anderson <dianders@xxxxxxxxxxxx>