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@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Best regards, Alex Ionescu