[ros-dev] SMP - Recursive bugcheck

Hartmut Birr hartmut.birr at gmx.de
Sun Dec 12 21:00:34 CET 2004


Hi,   

the bugcheck from the ipi routine occurs, if one processor requests a 
function which must be execute synchronous on all processors and if one 
processor doesn't execute the function within 5 seconds. Currently it 
exist only one of such a function. The function is MiFlushTlbIpiRoutine 
which is called if a memory mapping is changed or deleted. I've add the 
time limit to the ipi execution to stop all execution if one processor 
hangs. Usually the call frames are not interesting. The interesting part 
is why the ipi is not delivered. Can you describe your hardware a little 
bit? If you use a early P2B-DS board from asus, possible you must add a 
hardware fix (moving a 0 ohm resistor). Can you enable  the debug prints 
from MpsTimerHandler in apic.c? You must change all the '#if 0' to '#if 
1' in MpsTimerHandler. If you enable this lines,  you should have a 
second computer for debug prints.   

- Hartmut

David Kredba schrieb:

> With current cvs tree, booted from freeldr floppy and hdd, same config 
> I got :
>
> (ke/ipi.c: 114) Waiting longer than 5 seconds to start the ipi routine
>
> KeBugCheck at ke/ipi.c: 115
>
> ntoskrnl.exe : misc KeBugCheck and _KiIpiServiceRoutine at 8
>         little interestig is frame 3db0 :
>
> c0003da0 <_PsBeginThread>:
>
>     /*
>      * Do the necessary prolog after a context switch
>      */
>     call    _PiBeforeBeginThread
> c0003da0:    e8 b1 ec 0a 00           call   c00b2a56 
> <_PiBeforeBeginThread>
>
>     /*
>      * Call the actual start of the thread
>      */
>     movl    4(%esp), %ebx                /* Start routine */
> c0003da5:    8b 5c 24 04              mov    0x4(%esp),%ebx
>     movl    8(%esp), %eax                /* Start context */
> c0003da9:    8b 44 24 08              mov    0x8(%esp),%eax
>     pushl    %eax
> c0003dad:    50                       push   %eax
>     call    *%ebx                        /* Call the start routine */
> c0003dae:    ff d3                    call   *%ebx
>     addl    $4, %esp
> c0003db0:    83 c4 04                 add    $0x4,%esp
>
>     /*
>      * Terminate the thread
>      */
>
>
> hal.dll :
>
> First frame is 186a0 :
>
> Ki386EnableInterrupts();
>    18693:    fb                       sti
> #if 0
>    DbgPrint("(%s:%d) MpsIpiHandler on CPU%d, current irql is %d\n",
>             __FILE__,__LINE__, KeGetCurrentProcessorNumber(), 
> KeGetCurrentIrql());
> #endif
>
>    KiIpiServiceRoutine(NULL, NULL);
>    18694:    83 ec 08                 sub    $0x8,%esp
>    18697:    6a 00                    push   $0x0
>    18699:    6a 00                    push   $0x0
>    1869b:    e8 20 31 00 00           call   1b7c0 
> <_KiIpiServiceRoutine at 8>
>    186a0:    83 c4 08                 add    $0x8,%esp
>
> #if 0
>    DbgPrint("(%s:%d) MpsIpiHandler on CPU%d done\n", 
> __FILE__,__LINE__, KeGetCurrentProcessorNumber());
> #endif
>
>    Ki386DisableInterrupts();
>
> the second frame is : 190ff
>
> 000190e0 <_MpsIpiInterrupt>:
>
> .global _MpsIpiInterrupt
> _MpsIpiInterrupt:
>   /* Save registers */   
>   BEFORE
>    190e0:    fc                       cld
>    190e1:    60                       pusha
>    190e2:    1e                       push   %ds
>    190e3:    06                       push   %es
>    190e4:    0f a0                    push   %fs
>    190e6:    0f a8                    push   %gs
>    190e8:    b8 10 00 00 00           mov    $0x10,%eax
>    190ed:    8e d8                    mov    %eax,%ds
>    190ef:    8e c0                    mov    %eax,%es
>    190f1:    8e e8                    mov    %eax,%gs
>    190f3:    b8 30 00 00 00           mov    $0x30,%eax
>    190f8:    8e e0                    mov    %eax,%fs
>
>   /* Call the C handler */
>   call  _MpsIpiHandler
>    190fa:    e8 78 f5 ff ff           call   18677 <_MpsIpiHandler>
>
>     /* Return to the caller */
>   AFTER
>    190ff:    0f a9                    pop    %gs
>    19101:    0f a1                    pop    %fs
>    19103:    07                       pop    %es
>    19104:    1f                       pop    %ds
>    19105:    61                       popa
>   iret
>    19106:    cf                       iret
>
> 00019107 <_MpsErrorInterrupt>:
>
>
> Regards, David
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.com
> http://reactos.com:8080/mailman/listinfo/ros-dev
>
>



More information about the Ros-dev mailing list