Montecito running and little SMP-bug

Marc Lörner marc.loerner at hob.de
Thu Sep 11 08:45:49 UTC 2008


Hello!
I've got good news: 
Finally GENERIC-kernel without SMP-support is running now on my montecito 
box :-)
(It was as you suggested, after wiping out contents and partitions of harddisk 
the bsd-installer started as expected)

When turning on SMP, I always get an Page-Not-Present in function vcnt
in vm/vm_meter.c when it iterates through found CPUs.
I seems that pcpu_find returns NULL.

This is the last output I see:
fatal kernel trap (cpu 0):

    trap vector = 0x14 (Page Not Present)
    cr.iip      = 0xe00000000f577cb0
    cr.ipsr     = 0x1210080a6018 (ac,mfl,ic,i,dt,dfh,rt,cpl=0,it,ri=1,bn)
    cr.isr      = 0x20400000000 (code=0,vector=0,r,ei=1)
    cr.ifa      = 0x9bc
    curthread   = 0xe00000001029c000
        pid = 64, comm = sysctl

[thread pid 64 tid 100033 ]
Stopped at      vcnt+0xa1:      [M1]    ld4 r15=[r8]
db> 


Following is the output of the APIC-table:

Table 'APIC' at 0xe0000000ff1b6620
        Local APIC address=0xfee00000
        Local SAPIC entry
                ProcessorId=0x0, Id=0x0, Eid=0x0
        Local SAPIC entry
                ProcessorId=0x1, Id=0x1, Eid=0x0 (disabled)
        Local SAPIC entry
                ProcessorId=0x2, Id=0x2, Eid=0x0
        Local SAPIC entry
                ProcessorId=0x3, Id=0x3, Eid=0x0 (disabled)


I think the case of running/enabled CPUs being not contiguous is not thought 
of when initializing pcpus. So the id is taken as index into pcpu-array 
(cpuid_to_pcpu).
=> In above case we find 2 running cpus => mp_ncpus = 2, but cpuid_to_pcpu[1]
is zero (not enabled).

It seems that platform independend code relies on pcpu-array not having holes 
and being filled contiguously.
=> We don't have to use "sapic->ID" as index into array (c.f. function 
cpu_mp_add) instead we need own static index-counter that's incremented on 
finding enabled CPU when iterating through APIC-table (see file 
sys/ia64/acpica/madt.c)

Regards,
Marc Loerner


More information about the freebsd-ia64 mailing list