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@0))>
 Frames:
 <NTOSKRNL.EXE:a027 (ntoskrnl/ke/gmutex.c:201
 (@KeAcquireGuardedMutex@4))>
 <NTOSKRNL.EXE:6d3a2 (ntoskrnl/include/internal/mm.h:1556
 (MmProbeAndLockPages@12))>
 <NTOSKRNL.EXE:4f079 (ntoskrnl/io/iomgr/irp.c:694
 (IoBuildAsynchronousFsdRequest@24))>
 <SCSIPORT.SYS:4671 (drivers/storage/scsiport/scsiport.c:3959
 (ScsiPortDpcForIsr@16))>
 <NTOSKRNL.EXE:823a (ntoskrnl/ke/dpc.c:474 (@KiRetireDpcList@4))>
 <NTOSKRNL.EXE:9fc59 (ntoskrnl/ke/i386/ctxswitch.S:691
 (@KiIdleLoop@0))>
 <00000000>
 kdb:>
 _______________________________________________
 Ros-dev mailing list
 Ros-dev(a)reactos.org
 
http://www.reactos.org/mailman/listinfo/ros-dev 
Best regards,
Alex Ionescu