[ros-dev] ARM Guy Broke BOOT on Real Hardware

Alex Ionescu ionucu at videotron.ca
Mon Jul 28 05:32:29 CEST 2008


It looks like a guarded mutex is being acquired at DPC level. That's  
pretty bad.

Pushlocks shouldn't be acquired at DPC level either, but there's no  
ASSERTs in the pushlock code that check for that.

MMProbeAndLockPages should never be called for paged pool addreses  
while at DPC level, which means the driver probably called it for a  
non-paged pool address.

In that case, the whole loop about checking if the page is present and  
then faulting it in is irrelevant, and won't happen.

So I think the lock should move down and only wrap the access fault  
paths.

However, those paths already attempt to lock the address space, I  
believe, so the lock may not be needed here at all. I'd try removing  
it. In any case, it's not needed while at DPC_LEVEL since operations  
on the address space are already blocked, plus these are non-paged  
pool, resident addresses that won't change.

On 27-Jul-08, at 7:58 PM, James Tabor wrote:

> Hi ARMs,
> Doing a good job BTW~
> Thanks,
> James
>
>
> (ntoskrnl/kd/kdio.c:191)  
> -----------------------------------------------------
> (ntoskrnl/kd/kdio.c:192) ReactOS 0.4-SVN (Build 20080728-r34871)
> (ntoskrnl/kd/kdio.c:193) Command Line: DEBUG  DEBUGPORT=COM1
> BUADRATE=115200  SOS
> (ntoskrnl/kd/kdio.c:194) ARC Paths:
> multi(0)disk(0)rdisk(0)partition(1) \ multi(0)disk(0)rdisk(0)parti
> tion(1) \ReactOS\
> Used memory 1015348Kb
> (ntoskrnl/mm/mminit.c:295)    Start         End         Type
> (ntoskrnl/mm/mminit.c:296) 0x80000000 - 0x80800000      Undefined  
> region
> (ntoskrnl/mm/mminit.c:299) 0x80800000 - 0x80E00000      FreeLDR Kernel
> mapping region
> (ntoskrnl/mm/mminit.c:302) 0x80E00000 - 0x815C0000      PFN Database  
> region
> (ntoskrnl/mm/mminit.c:309) 0x815C0000 - 0x879C0000      Non paged  
> pool region
> (ntoskrnl/mm/mminit.c:312) 0x879C0000 - 0x8DDC0000      Paged pool  
> region
> (ntoskrnl/ke/i386/kiinit.c:47) Large Page support detected but not yet
> taken advantage of!
> WARNING:  KdDebuggerInitialize1 at drivers/base/kdcom/i386/kdbg.c:489
> is UNIMPLEMENTED!
> WARNING:  IoReportResourceUsage at ntoskrnl/io/iomgr/iorsrce.c:700 is
> UNIMPLEMENTED!
> WARNING:  IoReportResourceUsage at ntoskrnl/io/iomgr/iorsrce.c:700 is
> UNIMPLEMENTED!
> (ntoskrnl/io/iomgr/driver.c:1356) '\Driver\BUSLOGIC' initialization
> failed, status (0xc00000c0)
> (ntoskrnl/io/iomgr/driver.c:1356) '\Driver\Floppy' initialization
> failed, status (0xc000000e)
> Assertion 'KeGetCurrentIrql()<=(1)' failed at ntoskrnl/ke/gmutex.c  
> line 201
> Entered debugger on embedded INT3 at 0x0008:0x808a8262.
> kdb:> bt
> Eip:
> <NTOSKRNL.EXE:a8263 (lib/rtl/i386/debug_asm.S:33 (DbgBreakPoint at 0))>
> Frames:
> <NTOSKRNL.EXE:a027 (ntoskrnl/ke/gmutex.c:201  
> (@KeAcquireGuardedMutex at 4))>
> <NTOSKRNL.EXE:6d3a2 (ntoskrnl/include/internal/mm.h:1556
> (MmProbeAndLockPages at 12))>
> <NTOSKRNL.EXE:4f079 (ntoskrnl/io/iomgr/irp.c:694
> (IoBuildAsynchronousFsdRequest at 24))>
> <SCSIPORT.SYS:4671 (drivers/storage/scsiport/scsiport.c:3959
> (ScsiPortDpcForIsr at 16))>
> <NTOSKRNL.EXE:823a (ntoskrnl/ke/dpc.c:474 (@KiRetireDpcList at 4))>
> <NTOSKRNL.EXE:9fc59 (ntoskrnl/ke/i386/ctxswitch.S:691  
> (@KiIdleLoop at 0))>
> <00000000>
> kdb:>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev

Best regards,
Alex Ionescu



More information about the Ros-dev mailing list