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

Andriy Gapon avg at FreeBSD.org
Mon Jun 6 14:23:13 UTC 2011


Author: avg
Date: Mon Jun  6 14:23:13 2011
New Revision: 222756
URL: http://svn.freebsd.org/changeset/base/222756

Log:
  don't use cpuid level 4 in x86 cpu topology detection if it's not supported
  
  This regression was introduced in r213323.
  There are probably no Intel cpus that support amd64 mode, but do not
  support cpuid level 4, but it's better to keep i386 and amd64 versions
  of this code in sync.
  
  Discovered by:	pho
  Tested by:	pho
  MFC after:	2 weeks

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

Modified: head/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- head/sys/amd64/amd64/mp_machdep.c	Mon Jun  6 13:50:29 2011	(r222755)
+++ head/sys/amd64/amd64/mp_machdep.c	Mon Jun  6 14:23:13 2011	(r222756)
@@ -241,8 +241,11 @@ topo_probe_0x4(void)
 	 * logical processors that belong to the same core
 	 * as BSP thus deducing number of threads per core.
 	 */
-	cpuid_count(0x04, 0, p);
-	max_cores = ((p[0] >> 26) & 0x3f) + 1;
+	if (cpu_high >= 0x4) {
+		cpuid_count(0x04, 0, p);
+		max_cores = ((p[0] >> 26) & 0x3f) + 1;
+	} else
+		max_cores = 1;
 	core_id_bits = mask_width(max_logical/max_cores);
 	if (core_id_bits < 0)
 		return;

Modified: head/sys/i386/i386/mp_machdep.c
==============================================================================
--- head/sys/i386/i386/mp_machdep.c	Mon Jun  6 13:50:29 2011	(r222755)
+++ head/sys/i386/i386/mp_machdep.c	Mon Jun  6 14:23:13 2011	(r222756)
@@ -289,8 +289,11 @@ topo_probe_0x4(void)
 	 * logical processors that belong to the same core
 	 * as BSP thus deducing number of threads per core.
 	 */
-	cpuid_count(0x04, 0, p);
-	max_cores = ((p[0] >> 26) & 0x3f) + 1;
+	if (cpu_high >= 0x4) {
+		cpuid_count(0x04, 0, p);
+		max_cores = ((p[0] >> 26) & 0x3f) + 1;
+	} else
+		max_cores = 1;
 	core_id_bits = mask_width(max_logical/max_cores);
 	if (core_id_bits < 0)
 		return;


More information about the svn-src-head mailing list