WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] Fix time_resume()

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Fix time_resume()
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 04 Jun 2007 03:14:40 -0700
Delivery-date: Mon, 04 Jun 2007 03:13:59 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1178223699 21600
# Node ID 204046d995621fe88649daaaffa32ee42c18cdd4
# Parent  a141484a91d0c420f1227e0914d61aaf74fb406b
[IA64] Fix time_resume()

Add missing exclusion in time_resume() and steal time accounting
reinitialization after resume.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/kernel/time.c    |   56 ++++++++++++++++++++++++
 linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c |   13 -----
 2 files changed, 56 insertions(+), 13 deletions(-)

diff -r a141484a91d0 -r 204046d99562 
linux-2.6-xen-sparse/arch/ia64/kernel/time.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/time.c      Thu May 03 14:14:41 
2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/time.c      Thu May 03 14:21:39 
2007 -0600
@@ -267,6 +267,62 @@ static void init_missing_ticks_accountin
        per_cpu(processed_stolen_time, cpu) = runstate->time[RUNSTATE_runnable]
                                            + runstate->time[RUNSTATE_offline];
 }
+
+static int xen_ia64_settimefoday_after_resume;
+
+static int __init __xen_ia64_settimeofday_after_resume(char *str)
+{
+       xen_ia64_settimefoday_after_resume = 1;
+       return 1;
+}
+
+__setup("xen_ia64_settimefoday_after_resume",
+        __xen_ia64_settimeofday_after_resume);
+
+/* Called after suspend, to resume time.  */
+void
+time_resume(void)
+{
+       unsigned int cpu;
+       
+       /* Just trigger a tick.  */
+       ia64_cpu_local_tick();
+
+       if (xen_ia64_settimefoday_after_resume) {
+               /* do_settimeofday() resets timer interplator */
+               struct timespec xen_time;
+               int ret;
+               efi_gettimeofday(&xen_time);
+
+               ret = do_settimeofday(&xen_time);
+               WARN_ON(ret);
+       } else {
+#if 0
+               /* adjust EFI time */
+               struct timespec my_time = CURRENT_TIME;
+               struct timespec xen_time;
+               static timespec diff;
+               struct xen_domctl domctl;
+               int ret;
+
+               efi_gettimeofday(&xen_time);
+               diff = timespec_sub(&xen_time, &my_time);
+               domctl.cmd = XEN_DOMCTL_settimeoffset;
+               domctl.domain = DOMID_SELF;
+               domctl.u.settimeoffset.timeoffset_seconds = diff.tv_sec;
+               ret = HYPERVISOR_domctl_op(&domctl);
+               WARN_ON(ret);
+#endif
+               /* Time interpolator remembers the last timer status.
+                  Forget it */
+               write_seqlock_irq(&xtime_lock);
+               time_interpolator_reset();
+               write_sequnlock_irq(&xtime_lock);
+       }
+
+       for_each_online_cpu(cpu)
+               init_missing_ticks_accounting(cpu);
+}
 #else
 #define init_missing_ticks_accounting(cpu) do {} while (0)
 #endif
diff -r a141484a91d0 -r 204046d99562 
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Thu May 03 14:14:41 
2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Thu May 03 14:21:39 
2007 -0600
@@ -863,19 +863,6 @@ direct_remap_pfn_range(struct vm_area_st
 }
 
 
-/* Called after suspend, to resume time.  */
-void
-time_resume(void)
-{
-       extern void ia64_cpu_local_tick(void);
-
-       /* Just trigger a tick.  */
-       ia64_cpu_local_tick();
-
-       /* Time interpolator remembers the last timer status.  Forget it */
-       time_interpolator_reset();
-}
-
 ///////////////////////////////////////////////////////////////////////////
 // expose p2m table
 #ifdef CONFIG_XEN_IA64_EXPOSE_P2M

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Fix time_resume(), Xen patchbot-unstable <=