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