Hi Brendan,
Brendan wrote:
The first part (HTT flag clear) makes perfect sense - according to Intel's site,
Celeron M 440 is a single-core chip without hyper-threading.
The second part (ACPI results) look wrong. Even if there's 4 separate physical packages/chips (which doesn't make much sense for mobile parts), it'd be very rare for the local APIC IDs to be in such a strange order.
Thanks for the response. Apparently I was parsing the MADT correctly (I have verified that there are indeed 2 APIC entries) but I forgot the importance of the "Enable" field (I know, quite a big mistake). Specifically, the "APIC ID 0x81, ACPI ID 2" entry is marked as “disabled” (you were right that it looked wrong).
I remember you mentioning in other posts that Intel tends to disable/enable certain features in their processors, either because they have some defects or just because they seek of selling them under different series eliminating the need/cost of making new chips. I think that applies in my case. Either my processor is a defected HT processor (with 1 of its APIC not working) or a processor from a more expensive series (so they just disabled 1 APIC).
Now, a question I have regarding the CPU topology detection. When I run my topology detection code on my Celeron 440 M (which is a single-core processor without HT), I get (using CPUID leaf 4), max PACKAGE_ID = 1, max CORE_ID = 1 and max SMT_ID = 1.
I get max CORE_ID = 1 and max SMT_ID = 1 because CPUID says that max CORE_ID and max SMT_ID should be equal to the nearest power-of-2 integer that is not smaller than (1 + EAX[25:14]) and (1 + EAX[31:26]) respectively). So, although I get “0” from EAX[25:14] and EAX[31:26], I add “1” because that’s what it says to do. Also, I get PACKAGE_ID = 1 because although I get count=0 from EBX bits 16 to 23, I add 1 to the result as the manual says.
So, I end up with max PACKAGE_ID = 1, max CORE_ID = 1 and max SMT_ID = 1 which is certainly wrong. Do I have to assign all max PACKAGE_ID, max CORE_ID and max SMT_ID to 0 without reading the CPUID flags at all in this case (single-core processor without HT) ?
Something else that confuses me is that Intel’s manual 2A and “Intel’s Detecting Multi-Core Processor Topology in an IA-32 Platform” document seem to have a different opinion upon certain things.
While the former says as mentioned that:
that max CORE_ID and max SMT_ID should be equal to the nearest power-of-2 integer that is not smaller than (1 + EAX[25:14]) and (1 + EAX[31:26]) respectively)
the latter says that:
“One should not assume that the number of available threads or cores will be a power of two.”
Kind regards,
limp