git: nvmm - Fix TSC synchronization issues

Aaron LI aly at crater.dragonflybsd.org
Tue Jul 20 16:30:23 PDT 2021


commit c9096cab4ce6c0febd2dfe41f841c7e844fea2a9
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Wed Jun 23 17:51:40 2021 -0700

    nvmm - Fix TSC synchronization issues
    
    * Save the guest TSC offset in cpudata as 'gtsc_offset', replacing the
      origin absolute TSC value stored as 'gtsc'.
    
    * QEMU and other emulators probably have no intention of actually
      forcing the TSC state in the SETSTATE call, so don't act on it
      if it matches the value we previously returned.
    
      This allows the guest to inherit a completely synchronized TSC from
      the host.  Without it, the TSC's for the VCPUs wind up being badly
      out of sync.
    
    * Updating MSR_TSC completely blows up TSC mp synchronization.  We
      assume QEMU did not intend to update the TSC if it tries to write
      0 or tries to write the value returned in the previous getstate.
    
    * This allows kernels to use the TSC as a clock, which costs nothing,
      verses the ACPI or HPET which have horrible overhead and a global
      mutex in QEMU.

Summary of changes:
 sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c | 37 ++++++++++++++++++++++++++-------
 sys/dev/virtual/nvmm/x86/nvmm_x86_vmx.c | 36 +++++++++++++++++++++++++-------
 2 files changed, 57 insertions(+), 16 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c9096cab4ce6c0febd2dfe41f841c7e844fea2a9


-- 
DragonFly BSD source repository



More information about the Commits mailing list