On Thu 2023-06-08 06:55:23, Doug Anderson wrote: > Hi, > > On Thu, Jun 8, 2023 at 4:02 AM Petr Mladek <pmladek@xxxxxxxx> wrote: > > > > > > config HARDLOCKUP_DETECTOR > > > > bool "Detect Hard Lockups" > > > > depends on DEBUG_KERNEL && !S390 > > > > - depends on HAVE_HARDLOCKUP_DETECTOR_NON_ARCH || HAVE_HARDLOCKUP_DETECTOR_ARCH > > > > + depends on ((HAVE_HARDLOCKUP_DETECTOR_PERF || HAVE_HARDLOCKUP_DETECTOR_BUDDY) && !HAVE_NMI_WATCHDOG) || HAVE_HARDLOCKUP_DETECTOR_ARCH > > > > > > Adding the dependency to buddy (see ablove) would simplify the above > > > to just this: > > > > > > depends on HAVE_HARDLOCKUP_DETECTOR_PERF || > > > HAVE_HARDLOCKUP_DETECTOR_BUDDY || HAVE_HARDLOCKUP_DETECTOR_ARCH > > > > This is exactly what I do not want. It would just move the check > > somewhere else. But it would make the logic harder to understand. > > Hmmm. To me, it felt easier to understand by moving this into the > "HAVE_HARDLOCKUP_DETECTOR_BUDDY". To me it was pretty easy to say "if > an architecture defined its own arch-specific watchdog then buddy > can't be enabled" and that felt like it fit cleanly within the > "HAVE_HARDLOCKUP_DETECTOR_BUDDY" definition. It got rid of _a lot_ of > other special cases / checks elsewhere and felt quite a bit cleaner to > me. I only had to think about the conflict between the "buddy" and > "nmi" watchdogs once when I understood > "HAVE_HARDLOCKUP_DETECTOR_BUDDY". I see. My problem with this approach was that the dependencies between the 4 alternative implementations were too distributed. It was necessary read many definitions to understand what was possible and what was not possible. And it is even more complicated when cscope does not support Kconfig. Also the above solves the buddy detector which is global. The same conflict has PERF which has arch-specific dependencies. Maybe, it can be disabled by a conflict in the arch/Kconfig. But then the PERF dependencies would be split into 3 config files: arch/Kconfig, lib/Kconfig.debug, arch/Kconfig/. Anyway, HAVE_*_BUDDY and HAVE_*_PERF should behave the same. Both should either explicitly conflict with HAVE_*_ARCH and HAVE_NMI_WATCHDOG. Or they both should be enabled when they are supported by the architecture and just ignored when choosing the final implementation. My wish was to have consistent naming: + HAVE_HARDLOCKUP_DETECTOR_<impl> set when the the architecture supports the particular implementation. + HARDLOCKUP_DETECTOR_<impl> set when the implementation will be used (built). Step aside: It seems that we have entered into a bike shedding mode. The following questions come to my mind: 1. Does this patchset improve the current state? 2. Maybe, it is not black&white. Is it possible to summarize what exactly got better and what got worse? Maybe, there is no need to do bike-shedding about every step if the final result is reasonable and the steps are not completely wrong. I just followed my intuition and tried to do some changes step by step. I got lost many times so maybe the steps are not ideal. Anyway, the steps helped me to understand the logic and stay reasonably confident that they did not change the behavior. I could rework the patchset. But I first need to know what exactly is bad in the result. And eventually if there is more logical way how to end there. Best Regards, Petr