svn commit: r211892 - in stable/7/sys: amd64/amd64 i386/i386 kern
John Baldwin
jhb at FreeBSD.org
Fri Aug 27 18:55:49 UTC 2010
Author: jhb
Date: Fri Aug 27 18:55:48 2010
New Revision: 211892
URL: http://svn.freebsd.org/changeset/base/211892
Log:
MFC 210774,210935:
- Tweak the logic to disable CLFLUSH in virtual environments to work around
problems with flushing the local APIC register range so that it checks
vm_guest directly.
- Add Xen to the list of virtual vendors. In the non PV (HVM) case this
fixes the virtualization detection successfully disabling the CLFLUSH
instruction.
Modified:
stable/7/sys/amd64/amd64/initcpu.c
stable/7/sys/i386/i386/initcpu.c
stable/7/sys/kern/subr_param.c
Directory Properties:
stable/7/sys/ (props changed)
stable/7/sys/cddl/contrib/opensolaris/ (props changed)
stable/7/sys/contrib/dev/acpica/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
Modified: stable/7/sys/amd64/amd64/initcpu.c
==============================================================================
--- stable/7/sys/amd64/amd64/initcpu.c Fri Aug 27 18:55:24 2010 (r211891)
+++ stable/7/sys/amd64/amd64/initcpu.c Fri Aug 27 18:55:48 2010 (r211892)
@@ -177,17 +177,17 @@ initializecpucache()
if ((cpu_feature & CPUID_CLFSH) != 0)
cpu_clflush_line_size = ((cpu_procinfo >> 8) & 0xff) * 8;
/*
- * XXXKIB: (temporary) hack to work around traps generated when
- * CLFLUSHing APIC registers window.
+ * XXXKIB: (temporary) hack to work around traps generated
+ * when CLFLUSHing APIC register window under virtualization
+ * environments. These environments tend to disable the
+ * CPUID_SS feature even though the native CPU supports it.
*/
TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
- if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS) &&
- hw_clflush_disable == -1)
+ if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1)
cpu_feature &= ~CPUID_CLFSH;
/*
* Allow to disable CLFLUSH feature manually by
- * hw.clflush_disable tunable. This may help Xen guest on some AMD
- * CPUs.
+ * hw.clflush_disable tunable.
*/
if (hw_clflush_disable == 1)
cpu_feature &= ~CPUID_CLFSH;
Modified: stable/7/sys/i386/i386/initcpu.c
==============================================================================
--- stable/7/sys/i386/i386/initcpu.c Fri Aug 27 18:55:24 2010 (r211891)
+++ stable/7/sys/i386/i386/initcpu.c Fri Aug 27 18:55:48 2010 (r211892)
@@ -724,17 +724,17 @@ initializecpu(void)
if ((cpu_feature & CPUID_CLFSH) != 0)
cpu_clflush_line_size = ((cpu_procinfo >> 8) & 0xff) * 8;
/*
- * XXXKIB: (temporary) hack to work around traps generated when
- * CLFLUSHing APIC registers window.
+ * XXXKIB: (temporary) hack to work around traps generated
+ * when CLFLUSHing APIC register window under virtualization
+ * environments. These environments tend to disable the
+ * CPUID_SS feature even though the native CPU supports it.
*/
TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
- if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS) &&
- hw_clflush_disable == -1)
+ if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1)
cpu_feature &= ~CPUID_CLFSH;
/*
* Allow to disable CLFLUSH feature manually by
- * hw.clflush_disable tunable. This may help Xen guest on some AMD
- * CPUs.
+ * hw.clflush_disable tunable.
*/
if (hw_clflush_disable == 1)
cpu_feature &= ~CPUID_CLFSH;
Modified: stable/7/sys/kern/subr_param.c
==============================================================================
--- stable/7/sys/kern/subr_param.c Fri Aug 27 18:55:24 2010 (r211891)
+++ stable/7/sys/kern/subr_param.c Fri Aug 27 18:55:48 2010 (r211892)
@@ -145,6 +145,7 @@ static const char *const vm_bnames[] = {
"QEMU", /* QEMU */
"Plex86", /* Plex86 */
"Bochs", /* Bochs */
+ "Xen", /* Xen */
NULL
};
More information about the svn-src-stable-7
mailing list