svn commit: r197663 - in head/sys: amd64/amd64 i386/i386

Konstantin Belousov kib at FreeBSD.org
Thu Oct 1 12:52:49 UTC 2009


Author: kib
Date: Thu Oct  1 12:52:48 2009
New Revision: 197663
URL: http://svn.freebsd.org/changeset/base/197663

Log:
  As a workaround, for Intel CPUs, do not use CLFLUSH in
  pmap_invalidate_cache_range() when self-snoop is apparently not reported
  in cpu features. We get a reserved trap when clflushing APIC registers
  window.
  
  XEN in full system virtualization mode removes self-snoop from CPU
  features, making this a problem.
  
  Tested by:	csjp
  Reviewed by:	alc
  MFC after:	3 days

Modified:
  head/sys/amd64/amd64/initcpu.c
  head/sys/i386/i386/initcpu.c

Modified: head/sys/amd64/amd64/initcpu.c
==============================================================================
--- head/sys/amd64/amd64/initcpu.c	Thu Oct  1 12:50:26 2009	(r197662)
+++ head/sys/amd64/amd64/initcpu.c	Thu Oct  1 12:52:48 2009	(r197663)
@@ -165,4 +165,10 @@ 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.
+	 */
+	if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS))
+		cpu_feature &= ~CPUID_CLFSH;
 }

Modified: head/sys/i386/i386/initcpu.c
==============================================================================
--- head/sys/i386/i386/initcpu.c	Thu Oct  1 12:50:26 2009	(r197662)
+++ head/sys/i386/i386/initcpu.c	Thu Oct  1 12:52:48 2009	(r197663)
@@ -717,6 +717,12 @@ 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.
+	 */
+	if (cpu_vendor_id == CPU_VENDOR_INTEL && !(cpu_feature & CPUID_SS))
+		cpu_feature &= ~CPUID_CLFSH;
 
 #if defined(PC98) && !defined(CPU_UPGRADE_HW_CACHE)
 	/*


More information about the svn-src-all mailing list