I've just found a totally nasty bug today with kvmclock, thanks to testing done by lihuang at #476075.
Issue is at follows:
in RHEL5 kernel, __pa can miscalculate the address of C symbols. We have to use __pa_symbol() for that. So we effectively register the wallclock time MSR in the wrong address, and get a bogus value in return.
I haven't seen this before, because userspace uses hwclock program to adjust clock on bootup (which is harmful, because it increases delta between host and guest).
Furthermore, if we disable hwclock and fix the above issue, wall clock will still be wrong in 10 minutes. This is because I failed to adjust an initial base for monotonic clock, making the first interrupt after bootup try to compensate exactly 10 minutes of lost ticks.
Again, the presence of the hwclock utility papered over this.
I already have a patch that fixes both issues.
You can download this test kernel from http://people.redhat.com/dzickus/el5
Please do NOT transition this bugzilla state to VERIFIED until our QE team
has sent specific instructions indicating when to do so. However feel free
to provide a comment indicating that this fix has been verified.
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.