[ros-dev] SMP - Recursive bugcheck

David Kredba kredba at ibot.cas.cz
Sun Dec 12 20:10:17 CET 2004


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


More information about the Ros-dev mailing list