svn commit: r225069 - head/sys/x86/x86
Mike Silbersack
silby at FreeBSD.org
Mon Aug 22 03:10:30 UTC 2011
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)
More information about the svn-src-head
mailing list