Author: silby
Date: Mon Aug 22 03:10:29 2011
New Revision: 225069
URL: http://svn.freebsd.org/changeset/base/225069

Log:
  Disable TSC usage inside SMP VM environments.  On my VMware ESXi 4.1
  environment with a core i5-2500K, operation in this mode causes timeouts
  from the mpt driver.  Switching to the ACPI-fast timer resolves this issue.
  Switching the VM back to single CPU mode also works, which is why I have
  not disabled the TSC in that mode.
  
  I did not test with KVM or other VM environments, but I am being cautious
  and assuming that the TSC is not reliable in SMP mode there as well.
  
  Reviewed by:  kib
  Approved by:  re (kib)
  MFC after:    Not applicable, the timecounter code is new for 9.x

Modified:
  head/sys/x86/x86/tsc.c

Modified: head/sys/x86/x86/tsc.c
==============================================================================
--- head/sys/x86/x86/tsc.c      Sun Aug 21 22:09:30 2011        (r225068)
+++ head/sys/x86/x86/tsc.c      Mon Aug 22 03:10:29 2011        (r225069)
@@ -464,11 +464,16 @@ init_TSC_tc(void)
         * synchronized.  If the user is sure that the system has synchronized
         * TSCs, set kern.timecounter.smp_tsc tunable to a non-zero value.
         * We also limit the frequency even lower to avoid "temporal anomalies"
-        * as much as possible.
+        * as much as possible.  The TSC seems unreliable in virtualized SMP
+        * environments, so it is set to a negative quality in those cases.
         */
        if (smp_cpus > 1) {
-               tsc_timecounter.tc_quality = test_smp_tsc();
-               max_freq >>= 8;
+               if (vm_guest != 0) {
+                       tsc_timecounter.tc_quality = -100;
+               } else {
+                       tsc_timecounter.tc_quality = test_smp_tsc();
+                       max_freq >>= 8;
+               }
        } else
 #endif
        if (tsc_is_invariant)
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to