aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.25-sparse/arch
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-03-26 09:50:35 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-03-26 09:50:35 +0000
commit9c127f7b32ec4b1f9a3cdbc6bd6f80dfcfbaa627 (patch)
tree53ee397643d3f55fad23c6d6d1225e5d1c1f5519 /xenolinux-2.4.25-sparse/arch
parentebf04906e5a4bef938cfa58c71dbe7e25cad75b2 (diff)
downloadxen-9c127f7b32ec4b1f9a3cdbc6bd6f80dfcfbaa627.tar.gz
xen-9c127f7b32ec4b1f9a3cdbc6bd6f80dfcfbaa627.tar.bz2
xen-9c127f7b32ec4b1f9a3cdbc6bd6f80dfcfbaa627.zip
bitkeeper revision 1.825.4.2 (4063fcebXyP3T4ohTINdoE1EnVdbIA)
time.c, setup.c: Fix time handling after suspend/resume cycle.
Diffstat (limited to 'xenolinux-2.4.25-sparse/arch')
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c7
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/time.c18
2 files changed, 25 insertions, 0 deletions
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c
index ad4a2fea4a..bce8d39497 100644
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c
+++ b/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c
@@ -1151,6 +1151,9 @@ static void stop_task(void *unused)
extern void blkdev_suspend(void);
extern void blkdev_resume(void);
+ extern void time_suspend(void);
+ extern void time_resume(void);
+
unsigned long *pfn_to_mfn_frame_list = NULL;
suspend_record_t *suspend_record = NULL;
struct net_device *dev;
@@ -1198,6 +1201,8 @@ static void stop_task(void *unused)
__cli();
+ time_suspend();
+
HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
clear_fixmap(FIX_SHARED_INFO);
@@ -1211,6 +1216,8 @@ static void stop_task(void *unused)
HYPERVISOR_shared_info = (shared_info_t *)fix_to_virt(FIX_SHARED_INFO);
memset(empty_zero_page, 0, PAGE_SIZE);
+ time_resume();
+
__sti();
blkdev_resume();
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c
index 663fdf2bad..1404fbdb2b 100644
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c
+++ b/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c
@@ -634,6 +634,24 @@ void __init time_init(void)
rdtscll(alarm);
}
+void time_suspend(void)
+{
+}
+
+void time_resume(void)
+{
+ unsigned long flags;
+ write_lock_irqsave(&xtime_lock, flags);
+ /* Get timebases for new environment. */
+ __get_time_values_from_xen();
+ /* Reset our own concept of passage of system time. */
+ processed_system_time = shadow_system_time;
+ /* Accept a warp in UTC (wall-clock) time. */
+ last_seen_tv.tv_sec = 0;
+ /* Make sure we resync UTC time with Xen on next timer interrupt. */
+ last_update_from_xen = 0;
+ write_unlock_irqrestore(&xtime_lock, flags);
+}
/*
* /proc/sys/xen: This really belongs in another file. It can stay here for