summaryrefslogtreecommitdiffstats
path: root/sys/i386/xen/clock.c
diff options
context:
space:
mode:
authorcperciva <cperciva@FreeBSD.org>2010-12-11 22:33:33 +0000
committercperciva <cperciva@FreeBSD.org>2010-12-11 22:33:33 +0000
commitb173b18025943e9b8fb30f95e8c8ad3161b21b0d (patch)
treee749edcd762588ceeb55969be6c576f03756fe2e /sys/i386/xen/clock.c
parent9f0c1183494ccb03e81314e3abc2e1dd7687f6bb (diff)
downloadFreeBSD-src-b173b18025943e9b8fb30f95e8c8ad3161b21b0d.zip
FreeBSD-src-b173b18025943e9b8fb30f95e8c8ad3161b21b0d.tar.gz
Reduce the Xen timecounter from 1GHz to 2^-9 GHz, thereby increasing the
timecounter period from 2^32 ns (~4.3s) to 2^41 ns (~36m39s). Some time sharing systems can skip clock interrupts for a few seconds when under load (e.g., if we've recently used more than our fair share of CPU and someone else wants a burst of CPU) and we were losing time in quanta of 2^32 ns due to timecounter wrapping. Increasing the timecounter period up to 2^41 ns is definitely overkill, but we still have microsecond timecounter precision, and anyone using paravirtualized hardware when they need submicrosecond timing is crazy.
Diffstat (limited to 'sys/i386/xen/clock.c')
-rw-r--r--sys/i386/xen/clock.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/i386/xen/clock.c b/sys/i386/xen/clock.c
index 5efd66d..03f2517 100644
--- a/sys/i386/xen/clock.c
+++ b/sys/i386/xen/clock.c
@@ -523,7 +523,8 @@ startrtclock()
set_cyc2ns_scale(cpu_khz/1000);
tsc_freq = cpu_khz * 1000;
- timer_freq = xen_timecounter.tc_frequency = 1000000000LL;
+ timer_freq = 1000000000LL;
+ xen_timecounter.tc_frequency = timer_freq >> 9;
tc_init(&xen_timecounter);
rdtscll(alarm);
@@ -830,7 +831,7 @@ xen_get_timecount(struct timecounter *tc)
clk = shadow->system_timestamp + get_nsec_offset(shadow);
- return (uint32_t)(clk);
+ return (uint32_t)(clk >> 9);
}
OpenPOWER on IntegriCloud