• Lecopzer Chen's avatar
    watchdog/perf: adapt the watchdog_perf interface for async model · 930d8f8d
    Lecopzer Chen authored
    When lockup_detector_init()->watchdog_hardlockup_probe(), PMU may be not
    ready yet.  E.g.  on arm64, PMU is not ready until
    device_initcall(armv8_pmu_driver_init).  And it is deeply integrated with
    the driver model and cpuhp.  Hence it is hard to push this initialization
    before smp_init().
    
    But it is easy to take an opposite approach and try to initialize the
    watchdog once again later.  The delayed probe is called using workqueues. 
    It need to allocate memory and must be proceed in a normal context.  The
    delayed probe is able to use if watchdog_hardlockup_probe() returns
    non-zero which means the return code returned when PMU is not ready yet.
    
    Provide an API - lockup_detector_retry_init() for anyone who needs to
    delayed init lockup detector if they had ever failed at
    lockup_detector_init().
    
    The original assumption is: nobody should use delayed probe after
    lockup_detector_check() which has __init attribute.  That is, anyone uses
    this API must call between lockup_detector_init() and
    lockup_detector_check(), and the caller must have __init attribute
    
    Link: https://lkml.kernel.org/r/20230519101840.v5.16.If4ad5dd5d09fb1309cebf8bcead4b6a5a7758ca7@changeidReviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Co-developed-by: default avatarPingfan Liu <kernelfans@gmail.com>
    Signed-off-by: default avatarPingfan Liu <kernelfans@gmail.com>
    Signed-off-by: default avatarLecopzer Chen <lecopzer.chen@mediatek.com>
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Suggested-by: default avatarPetr Mladek <pmladek@suse.com>
    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: 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: 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>
    930d8f8d
watchdog.c 27.5 KB