-diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
-index e7a0d05..0a90f5f 100644
---- a/xen/arch/x86/hvm/hvm.c
-+++ b/xen/arch/x86/hvm/hvm.c
-@@ -2325,7 +2325,10 @@ static void hvm_s3_suspend(struct domain *d)
- static void hvm_s3_resume(struct domain *d)
- {
- if ( test_and_clear_bool(d->arch.hvm_domain.is_s3_suspended) )
+diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c
+index 9e9ff9b..ef60265 100644
+--- a/xen/arch/x86/time.c
++++ b/xen/arch/x86/time.c
+@@ -859,6 +859,19 @@ void update_domain_wallclock_time(struct domain *d)
+ spin_unlock(&wc_lock);
+ }
+
++static void update_domain_rtc(void)
++{
++ struct domain *d;
++
++ rcu_read_lock(&domlist_read_lock);
++ for_each_domain ( d )
+ {
-+ rtc_update_clock(d);
- domain_unpause(d);
++ if ( is_hvm_domain(d) )
++ rtc_update_clock(d);
+ }
++ rcu_read_unlock(&domlist_read_lock);
++}
++
+ void domain_set_time_offset(struct domain *d, int32_t time_offset_seconds)
+ {
+ d->time_offset_seconds = time_offset_seconds;
+@@ -1370,6 +1383,8 @@ int time_resume(void)
+
+ update_vcpu_system_time(current);
+
++ update_domain_rtc();
++
+ return 0;
}
- static int hvmop_set_isa_irq_level(