SMP kernel hanging at when testing 8254 interrupt delivery

David P. Reese Jr. daver at gomerbud.com
Tue Jul 29 17:36:58 PDT 2003


A UP kernel boots just fine, however when I try to boot an SMP kernel the
boot process hangs in a loop in sys/i386/isa/clock.c.

$DragonFly: src/sys/i386/isa/clock.c,v 1.4 2003/07/06 21:23:49 dillon Exp $
. ..
#ifdef APIC_IO
        if (apic_8254_trial) {
                
                printf("APIC_IO: Testing 8254 interrupt delivery\n");
                while (read_intr_count(8) < 6)      <-- hangs here
                        ;       /* nothing */

What is most bothersome is that the SMP kernel hoses my CMOS checksum,
hinting that this is a result of a larger problem.

I discovered this problem with a snapshot from just a couple of days ago.
I'll go ahead and try a chronological binary search with the source tree
to see where the problem was introduced.  This seems to be a DragonFly
issue because an SMP FreeBSD 4.8 kernel boots just fine.

Has anyone else running DragonFly on SMP hardware encountered this problem?

If I am reading the source correctly, the routines in

   sys/i386/isa/icu_vector.s

increment the interrupt counts in the array intr_countp[vec] , so the above
loop waits for 6 interrupts from the rtc.    Is there anything I can examine
in the debugger to shed some light on the problem?

-- 

   David P. Reese Jr.                                      daver at xxxxxxxxxxxx
   --------------------------------------------------------------------------
   It can be argued that returning a NULL pointer when asked to allocate
   zero bytes is a silly response to a silly question.
                                         -- FreeBSD manual page for malloc(3)





More information about the Bugs mailing list