i've had a core i7 machine for some time with 4c/8t. unfortunately, the mp table has only 4 processor entries. evidently this is also the case on core i5/xeon 3xxxx machines with >= 4t as well.
in my case, i was given a lucky break by bios which gave the processors apic ids 0, 2, 4, 6 and the ioapic got apic id 8. since apic ids are unique within a system, it wasn't too hard to guess that i might be missing 1, 3, 5, 7. clearly guessing wrong will result in no boot for you. (unluckily, the xeon 3xxxx that's come for a visit gives its ioapic id 1. :-(.) a quick (but gruesome) hack later, and i was able to generate fake mp entries for the missing processors. and: chula# cat /dev/sysstat 0 1659 77046 458 444 0 0 391 94 0 1 2773 70167 686 698 0 0 0 87 0 2 2116 69208 616 433 0 0 0 86 0 3 2129 70004 804 431 0 0 0 85 0 4 2357 72195 567 462 0 0 0 90 0 5 1291 125929 602 429 0 0 0 85 0 6 2223 70054 526 478 0 0 0 85 0 7 2153 70028 568 405 0 0 0 84 0 i can then use cpuid to validate this. cpuid -t wires itself to each processor to get the apic id for that processor. chula# aux/cpuid -t thread 00000001 00000002 00000100 00000000 core 00000004 00000008 00000201 00000000 mach0 apic 00000000 mach1 apic 00000001 mach2 apic 00000002 mach3 apic 00000003 mach4 apic 00000004 mach5 apic 00000005 mach6 apic 00000006 mach7 apic 00000007 it's quite unfortunate that this info isn't available outside the processor. this is what the system thinks; the fields are type/apicno/flags/lintr0/lintr1/machno chula# cat /dev/mpapic proc 0 be 65536 65536 0 proc 1 e 65536 65536 1 proc 2 e 65536 65536 2 proc 3 e 65536 65536 3 proc 4 e 65536 65536 4 proc 5 e 65536 65536 5 proc 6 e 65536 65536 6 proc 7 e 65536 65536 7 ioapic 8 e 0 0 0 - erik