sdei_watchdog: refresh 'last_timestamp' when enabling nmi_watchdog
commit 5bc048a102ef9c3748464cacce443a0f1d9bed5b openeuler. The trigger period of secure time is set by firmware. We need to check the time_stamp every time the secure time fires to make sure the hardlockup detection is not executed too soon. We need to refresh 'last_timestamp' to the current time when we enable the nmi_watchdog. Otherwise, false hardlockup may be detected when the secure timer fires the first time. Signed-off-by: huwentao <huwentao19@h-partners.com>
This commit is contained in:
parent
f0bfc2e73d
commit
fb960c0410
|
@ -30,6 +30,8 @@ int watchdog_nmi_enable(unsigned int cpu)
|
||||||
if (!sdei_watchdog_registered)
|
if (!sdei_watchdog_registered)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
refresh_hld_last_timestamp();
|
||||||
|
|
||||||
ret = sdei_api_event_enable(sdei_watchdog_event_num);
|
ret = sdei_api_event_enable(sdei_watchdog_event_num);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("Enable NMI Watchdog failed on cpu%d\n",
|
pr_err("Enable NMI Watchdog failed on cpu%d\n",
|
||||||
|
|
|
@ -208,6 +208,7 @@ u64 hw_nmi_get_sample_period(int watchdog_thresh);
|
||||||
#if defined(CONFIG_HARDLOCKUP_CHECK_TIMESTAMP) && \
|
#if defined(CONFIG_HARDLOCKUP_CHECK_TIMESTAMP) && \
|
||||||
defined(CONFIG_HARDLOCKUP_DETECTOR)
|
defined(CONFIG_HARDLOCKUP_DETECTOR)
|
||||||
void watchdog_update_hrtimer_threshold(u64 period);
|
void watchdog_update_hrtimer_threshold(u64 period);
|
||||||
|
void refresh_hld_last_timestamp(void);
|
||||||
#else
|
#else
|
||||||
static inline void watchdog_update_hrtimer_threshold(u64 period) { }
|
static inline void watchdog_update_hrtimer_threshold(u64 period) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -89,6 +89,15 @@ static bool watchdog_check_timestamp(void)
|
||||||
__this_cpu_write(last_timestamp, now);
|
__this_cpu_write(last_timestamp, now);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void refresh_hld_last_timestamp(void)
|
||||||
|
{
|
||||||
|
ktime_t now;
|
||||||
|
|
||||||
|
now = ktime_get_mono_fast_ns();
|
||||||
|
__this_cpu_write(last_timestamp, now);
|
||||||
|
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static inline bool watchdog_check_timestamp(void)
|
static inline bool watchdog_check_timestamp(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue