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] x86: Re-initialise HPET on resume from S3

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: Re-initialise HPET on resume from S3
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 19 Nov 2008 08:10:41 -0800
Delivery-date: Wed, 19 Nov 2008 08:13:11 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/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 Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1227023714 0
# Node ID ed8524f4a044efbd6d30f9340c6ddfb00f972407
# Parent  85fda344dba7cf9d22ff0a792d70e032ce6c1b40
x86: Re-initialise HPET on resume from S3

Signed-off-by: Guanqun Lu <guanqun.lu@xxxxxxxxx>
Signed-off-by: Kevin Tian <kevin.tian@xxxxxxxxx>
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/hpet.c |    7 +------
 xen/arch/x86/time.c |   20 +++++++++++++++++---
 2 files changed, 18 insertions(+), 9 deletions(-)

diff -r 85fda344dba7 -r ed8524f4a044 xen/arch/x86/hpet.c
--- a/xen/arch/x86/hpet.c       Tue Nov 18 15:39:31 2008 +0000
+++ b/xen/arch/x86/hpet.c       Tue Nov 18 15:55:14 2008 +0000
@@ -264,14 +264,9 @@ int hpet_legacy_irq_tick(void)
 
 u64 hpet_setup(void)
 {
-    static u64 hpet_rate;
-    static int initialised;
+    u64 hpet_rate;
     u32 hpet_id, hpet_period, cfg;
     int i;
-
-    if ( initialised )
-        return hpet_rate;
-    initialised = 1;
 
     if ( hpet_address == 0 )
         return 0;
diff -r 85fda344dba7 -r ed8524f4a044 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Tue Nov 18 15:39:31 2008 +0000
+++ b/xen/arch/x86/time.c       Tue Nov 18 15:55:14 2008 +0000
@@ -60,6 +60,7 @@ struct platform_timesource {
     u64 frequency;
     u64 (*read_counter)(void);
     int (*init)(struct platform_timesource *);
+    void (*resume)(struct platform_timesource *);
     int counter_bits;
 };
 
@@ -396,12 +397,21 @@ static int init_hpet(struct platform_tim
     return 1;
 }
 
+static void resume_hpet(struct platform_timesource *pts)
+{
+    u64 hpet_rate = hpet_setup();
+
+    BUG_ON(hpet_rate == 0);
+    pts->frequency = hpet_rate;
+}
+
 static struct platform_timesource plt_hpet =
 {
     .name = "HPET",
     .read_counter = read_hpet_count,
     .counter_bits = 32,
-    .init = init_hpet
+    .init = init_hpet,
+    .resume = resume_hpet
 };
 
 /************************************************************
@@ -566,6 +576,10 @@ static void platform_time_calibration(vo
 
 static void resume_platform_timer(void)
 {
+    /* Timer source can be reset when backing from S3 to S0 */
+    if ( plt_src.resume )
+        plt_src.resume(&plt_src);
+
     /* No change in platform_stime across suspend/resume. */
     platform_timer_stamp = plt_stamp64;
     plt_stamp = plt_src.read_counter();
@@ -1214,12 +1228,12 @@ int time_resume(void)
 {
     /*u64 tmp = */init_pit_and_calibrate_tsc();
 
-    disable_pit_irq();
-
     /* Disable this while calibrate_tsc_ap() also is skipped. */
     /*set_time_scale(&this_cpu(cpu_time).tsc_scale, tmp);*/
 
     resume_platform_timer();
+
+    disable_pit_irq();
 
     init_percpu_time();
 

_______________________________________________
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] x86: Re-initialise HPET on resume from S3, Xen patchbot-unstable <=