[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 08/16] xen/arm: add watchdog domain suspend/resume helpers
On 05.03.25 11:11, Mykola Kvach wrote: From: Mykola Kvach <mykola_kvach@xxxxxxxx> This patch implements suspend/resume helpers for the watchdog. While a domain is suspended its watchdogs must be paused. Otherwise, if the domain stays in the suspend state for a longer period of time compared to the watchdog period, the domain would be shutdown on resume. Proper solution to this problem is to stop (suspend) the watchdog timers after the domain suspends and to restart (resume) the watchdog timers before the domain resumes. The suspend/resume of watchdog timers is done in Xen and is invisible to the guests. Signed-off-by: Mirela Simonovic <mirela.simonovic@xxxxxxxxxx> Signed-off-by: Saeed Nowshadi <saeed.nowshadi@xxxxxxxxxx> Signed-off-by: Mykyta Poturai <mykyta_poturai@xxxxxxxx> Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx> --- Changes in v3: - cover the code with CONFIG_SYSTEM_SUSPEND Changes in v2: - drop suspended field from timer structure - drop the call of watchdog_domain_resume from ctxt_switch_to --- xen/common/sched/core.c | 39 +++++++++++++++++++++++++++++++++++++++ xen/include/xen/sched.h | 9 +++++++++ 2 files changed, 48 insertions(+) diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c index b1c6b6b9fa..6c2231826a 100644 --- a/xen/common/sched/core.c +++ b/xen/common/sched/core.c @@ -1605,6 +1605,45 @@ void watchdog_domain_destroy(struct domain *d) kill_timer(&d->watchdog_timer[i].timer); }+#ifdef CONFIG_SYSTEM_SUSPEND+ +void watchdog_domain_suspend(struct domain *d) +{ + unsigned int i; + + spin_lock(&d->watchdog_lock); + + for ( i = 0; i < NR_DOMAIN_WATCHDOG_TIMERS; i++ ) + { + if ( test_bit(i, &d->watchdog_inuse_map) ) + { + stop_timer(&d->watchdog_timer[i].timer); + } + } + + spin_unlock(&d->watchdog_lock); +} + +void watchdog_domain_resume(struct domain *d) +{ + unsigned int i; + + spin_lock(&d->watchdog_lock); + + for ( i = 0; i < NR_DOMAIN_WATCHDOG_TIMERS; i++ ) + { + if ( test_bit(i, &d->watchdog_inuse_map) ) + { + set_timer(&d->watchdog_timer[i].timer, + NOW() + SECONDS(d->watchdog_timer[i].timeout)); + } + } + + spin_unlock(&d->watchdog_lock); +} + +#endif /* CONFIG_SYSTEM_SUSPEND */ My understanding is that domain's watchdogs support are not mandatory requirement for enabling basic System suspend2ram feature, as they are not enabled automatically. So, domain's watchdog patches can be separated and posted after basic functionality is in place. [...] -- Best regards, -grygorii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |