diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-03-26 09:50:35 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-03-26 09:50:35 +0000 |
commit | 9c127f7b32ec4b1f9a3cdbc6bd6f80dfcfbaa627 (patch) | |
tree | 53ee397643d3f55fad23c6d6d1225e5d1c1f5519 /xenolinux-2.4.25-sparse/arch | |
parent | ebf04906e5a4bef938cfa58c71dbe7e25cad75b2 (diff) | |
download | xen-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.c | 7 | ||||
-rw-r--r-- | xenolinux-2.4.25-sparse/arch/xen/kernel/time.c | 18 |
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 |