On 05.03.25 11:11, Mykola Kvach wrote:
From: Mykola Kvach <mykola_kv...@epam.com>
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.simono...@aggios.com>
Signed-off-by: Saeed Nowshadi <saeed.nowsh...@xilinx.com>
Signed-off-by: Mykyta Poturai <mykyta_potu...@epam.com>
Signed-off-by: Mykola Kvach <mykola_kv...@epam.com>
---
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