diff --git a/arch/arm64/kernel/watchdog_sdei.c b/arch/arm64/kernel/watchdog_sdei.c index 4fd1419729c2c37bef1879dc08413158d9b4b056..e36c4d398893b8875224539ad60842488204625a 100644 --- a/arch/arm64/kernel/watchdog_sdei.c +++ b/arch/arm64/kernel/watchdog_sdei.c @@ -21,11 +21,15 @@ static int sdei_watchdog_event_num; static bool disable_sdei_nmi_watchdog; +static bool sdei_watchdog_registered; int watchdog_nmi_enable(unsigned int cpu) { int ret; + if (!sdei_watchdog_registered) + return -EINVAL; + refresh_hld_last_timestamp(); ret = sdei_api_event_enable(sdei_watchdog_event_num); @@ -42,6 +46,9 @@ void watchdog_nmi_disable(unsigned int cpu) { int ret; + if (!sdei_watchdog_registered) + return; + ret = sdei_api_event_disable(sdei_watchdog_event_num); if (ret) pr_err("Disable NMI Watchdog failed on cpu%d\n", @@ -87,7 +94,7 @@ int __init watchdog_nmi_probe(void) sdei_watchdog_event_num = sdei_api_event_interrupt_bind(SDEI_NMI_WATCHDOG_HWIRQ); if (sdei_watchdog_event_num < 0) { - pr_err("bind interrupt failed !\n"); + pr_err("Bind interrupt failed. Firmware may not support SDEI !\n"); return sdei_watchdog_event_num; } @@ -100,6 +107,7 @@ int __init watchdog_nmi_probe(void) return ret; } + sdei_watchdog_registered = true; pr_info("SDEI Watchdog registered successfully\n"); return 0;