mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-24 20:48:55 +00:00
45be65a0c7
The TSC itself is saved/restored as a MSR by most hypervisors (e.g. KVM), so we generally don't need to also save/restore the TSC offset*; in fact, this could desync TSC and lead to guest time warping because the TSC offset cannot be set directly (it has to use a host TSC reference moment). However, some hypervisors need to use the TSC offset to fix up timekeeping in concert with virtio-pvclock. This CL does several things to resolve these issues: 1. Stop always restoring TSC offset. 2. Provide a new method for hypervisors to implement their own behavior with TSC offset & restoring timekeeping. 3. Take a common host TSC reference moment and provide it to the timekeeping restore method. * We later discovered KVM's pvclock seems to not be working correctly if we stop restoring the TSC offset. It seems that setting TSC_KHZ via the KVM API somehow fixes the issue as well. Further investigation is needed to understand why. For the time being we're going to keep the existing TSC offset restore behavior. Thanks to colindr@ for a ton of help debugging & understanding the underlying timekeeping problem and hypervisor oddities. BUG=b:311314468 TEST=tested on WHPX. Change-Id: Ib2196085061f57931362b3d5da2383bc5e1abbe7 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5042037 Commit-Queue: Noah Gold <nkgold@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Colin Downs-Razouk <colindr@google.com> Reviewed-by: Frederick Mayle <fmayle@google.com> |
||
---|---|---|
.. | ||
src | ||
Cargo.toml |