summaryrefslogtreecommitdiff
path: root/xen/time.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-21 19:34:47 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-21 19:34:47 +0200
commita2952398e5de8746a761a59686619d08d376bce3 (patch)
treedf2373bb1119468873c667624769455c36dc3786 /xen/time.c
parentba1b3afd50913473f3036a63b4a82d7ba5c42009 (diff)
parent92e98a7f4d4fa75b286a067e1d1caef514fccb0d (diff)
Merge branch 'master' into master-gdb_stubs
Diffstat (limited to 'xen/time.c')
-rw-r--r--xen/time.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/xen/time.c b/xen/time.c
index a11e7eb4..4ebe91fa 100644
--- a/xen/time.c
+++ b/xen/time.c
@@ -34,6 +34,7 @@ static unsigned64_t lastnsec;
static unsigned64_t hyp_get_stime(void) {
unsigned32_t version;
unsigned64_t cpu_clock, last_cpu_clock, delta, system_time;
+ unsigned64_t delta_high, delta_low;
unsigned32_t mul;
signed8_t shift;
volatile struct vcpu_time_info *time = &hyp_shared_info.vcpu_info[0].time;
@@ -54,7 +55,10 @@ static unsigned64_t hyp_get_stime(void) {
delta >>= -shift;
else
delta <<= shift;
- return system_time + ((delta * (unsigned64_t) mul) >> 32);
+ delta_high = delta >> 32;
+ delta_low = (unsigned32_t) delta;
+ return system_time + ((delta_low * (unsigned64_t) mul) >> 32)
+ + (delta_high * (unsigned64_t) mul);
}
unsigned64_t hyp_get_time(void) {
@@ -107,7 +111,6 @@ static void hypclock_intr(int unit, int old_ipl, void *ret_addr, struct i386_int
}
extern struct timeval time;
-extern struct timezone tz;
int
readtodc(tp)