8.1-PRERELEASE: CPU packages not detected correctly

Oliver Fromme olli at lurza.secnetix.de
Thu Jul 15 16:57:27 UTC 2010


Andriy Gapon wrote:
 > on 15/07/2010 15:27 Oliver Fromme said the following:
 > > Unfortunately, it didn't change.  Kernel output during boot
 > > is still the same; it displays 1 package x 8 cores.
 > 
 > If you are sure that everything is done correctly (patch really applied, kernel
 > really rebuilt and reinstalled, and reboot was to the new kernel), then perhaps
 > jkim would be interested in this issue.

Yes, I'm sure, I even added some printf() so I can be sure
that the patched code is actually executed.

Here is what happens in sys/amd64/amd64/mp_machdep.c:

In topo_probe(), cpu_high is 0xd, so topo_probe_0xb() is
called.  But the cpuid 0xb instruction doesn't seem to
return useful data:  All values are zero already in the
first level, so cpu_cores remains 0.

Back in topo_probe(), there is a fallback if cpu_cores is
stil 0:  It assigns mp_ncpu to cpu_cores, so it gets 8
which is wrong.

I patched topo_probe() so it calls topo_probe_0x4() after
topo_probe_0xb() if cpu_cores is still 0.  I think this
is a better fallback procedure.  With this patch, cpu_cores
gets the value 4 which is the correct one, finally:

FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
FreeBSD/SMP: 2 package(s) x 4 core(s)

This is the patch, it's against jkim's patched version:

@@ -265,7 +268,7 @@
 	else if (cpu_vendor_id == CPU_VENDOR_INTEL) {
 		if (cpu_high >= 0xb)
 			topo_probe_0xb();
-		else if (cpu_high >= 0x4)
+		if (cpu_high >= 0x4 && cpu_cores == 0)
 			topo_probe_0x4();
 	}
 	if (cpu_cores == 0)

Best regards
   Oliver

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart

FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd

"With sufficient thrust, pigs fly just fine.  However, this
is not necessarily a good idea.  It is hard to be sure where
they are going to land, and it could be dangerous sitting
under them as they fly overhead." -- RFC 1925


More information about the freebsd-stable mailing list