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

Reply via email to