Hello,
I checked the driver under Server2003-32-SP2 and also under Server2008-64.
Both gave the same results.
It seems that MmMapLockedPagesSpecifyCache cause the crash.
The allocation is done with the following code:
************************************************************************
NTSTATUS AllocateContinuousPhysicalMemory (IN PDEVICE_EXTENSION DevExt)
{
ULONG NumberOfMapRegisters;
DEVICE_DESCRIPTION DeviceDescription;
PPHYSICAL_ADDRESS LogicalAddress;
PDMA_ADAPTER DmaAdapter;
PDEVICE_OBJECT FdoData;
PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
PVOID UserSpaceAddress;
PAGED_CODE();
RtlZeroMemory(&DeviceDescription, sizeof(DEVICE_DESCRIPTION));
#if defined(DMA_VER2)
DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION2;
#else
DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION;
#endif
DeviceDescription.Master = TRUE;
DeviceDescription.ScatterGather = FALSE;
DeviceDescription.Dma32BitAddresses = FALSE;
DeviceDescription.Dma64BitAddresses = TRUE;
DeviceDescription.InterfaceType = PCIBus;
DeviceDescription.MaximumLength = COMMON_BUFFER_SIZE;
FdoData = WdfDeviceWdmGetPhysicalDevice(DevExt->Device);
DmaAdapter = IoGetDmaAdapter(FdoData,&DeviceDescription,&NumberOfMapRegisters);
if (!DmaAdapter)
{
KdPrint (("IoGetDmaAdapter failed.\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
AllocateCommonBuffer = DmaAdapter->DmaOperations->AllocateCommonBuffer;
if (!AllocateCommonBuffer)
{
KdPrint (("devExt->AllocateCommonBuffer=0x0\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
//Allocate common buffer and return its kernel virtual address
DevExt->KernelCommonBuffer = AllocateCommonBuffer(DmaAdapter,
COMMON_BUFFER_SIZE,
&LogicalAddress,
FALSE);
if (!DevExt->KernelCommonBuffer)
{
KdPrint (("AllocateCommonBuffer failed.\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
KdPrint (("DevExt->KernelCommonBuffer=%p\n",DevExt->KernelCommonBuffer));
RtlZeroMemory(DevExt->KernelCommonBuffer, COMMON_BUFFER_SIZE);
DevExt->CommonBufferMdl = IoAllocateMdl (DevExt->KernelCommonBuffer,COMMON_BUFFER_SIZE,FALSE, FALSE, NULL);
if (!DevExt->CommonBufferMdl)
{
KdPrint (("IoAllocateMdl failed.\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
KdPrint (("DevExt->CommonBufferMdl=%p\n",DevExt->CommonBufferMdl));
MmBuildMdlForNonPagedPool (DevExt->CommonBufferMdl);
return STATUS_SUCCESS;
}
***********************************************************************
Following is the output of !analyze -v:
***********************************************************************
Loading Dump File [\1public\PUBLIC\a99059\Mini120411-03.dmp]
Mini Kernel Dump File: Only registers and stack trace are available
Symbol search path is: M:\zvi_vered\module\FIO\windows\module\objchk_wnet_x86\i386;M:\zvi_vered\module\FIO\windows\module\objchk_wxp_x86\i386
Executable search path is:
Unable to load image \WINDOWS\system32\ntkrnlpa.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntkrnlpa.exe
*** ERROR: Module load completed but symbols could not be loaded for ntkrnlpa.exe
Windows Server 2003 Kernel Version 3790 (Service Pack 2) MP (24 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
Machine Name:
Kernel base = 0x80800000 PsLoadedModuleList = 0x808a6ea8
Debug session time: Sun Dec 4 13:26:50.548 2011 (GMT+2)
System Uptime: 0 days 0:23:31.828
Unable to load image \WINDOWS\system32\ntkrnlpa.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntkrnlpa.exe
*** ERROR: Module load completed but symbols could not be loaded for ntkrnlpa.exe
Loading Kernel Symbols
...............................................................
.......................................................
Loading User Symbols
Loading unloaded module list
........
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
BugCheck 7A, {1, d0000006, ff0522f0, c0006000}
*** WARNING: Unable to verify timestamp for mssmbios.sys
*** ERROR: Module load completed but symbols could not be loaded for mssmbios.sys
***** Kernel symbols are WRONG. Please fix symbols to do analysis.
Unable to load image wdf01000.sys, Win32 error 0n2
*** WARNING: Unable to verify timestamp for wdf01000.sys
*** ERROR: Module load completed but symbols could not be loaded for wdf01000.sys
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
Probably caused by : Pci9x5x.sys ( Pci9x5x!PLxEvtIoControl+151 )
Followup: MachineOwner
9: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
KERNEL_DATA_INPAGE_ERROR (7a)
The requested page of kernel data could not be read in. Typically caused by
a bad block in the paging file or disk controller error. Also see
KERNEL_STACK_INPAGE_ERROR.
If the error status is 0xC000000E, 0xC000009C, 0xC000009D or 0xC0000185,
it means the disk subsystem has experienced a failure.
If the error status is 0xC000009A, then it means the request failed because
a filesystem failed to make forward progress.
Arguments:
Arg1: 00000001, lock type that was held (value 1,2,3, or PTE address)
Arg2: d0000006, error status (normally i/o status code)
Arg3: ff0522f0, current process (virtual address for lock type 3, or PTE)
Arg4: c0006000, virtual address that could not be in-paged (or PTE contents if arg1 is a PTE address)
Debugging Details:
***** Kernel symbols are WRONG. Please fix symbols to do analysis.
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: nt!_KPRCB ***
*** ***
*************************************************************************
ADDITIONAL_DEBUG_TEXT:
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols.
MODULE_NAME: Pci9x5x
FAULTING_MODULE: 80800000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 4edb586a
ERROR_CODE: (NTSTATUS) 0xd0000006 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The required data was not placed into memory because of an I/O error status of "0x%08lx".
BUGCHECK_STR: 0x7a_d0000006
CUSTOMER_CRASH_COUNT: 3
DEFAULT_BUCKET_ID: DRIVER_FAULT_SERVER_MINIDUMP
CURRENT_IRQL: 0
LAST_CONTROL_TRANSFER: from 80851cd9 to 80827c63
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
b81e2a18 80851cd9 0000007a 00000001 d0000006 nt+0x27c63
b81e2a4c 80852458 ff0522f0 c0600030 ff0523d0 nt+0x51cd9
b81e2a68 8083c965 c0600030 ff0522f0 00000021 nt+0x52458
b81e2abc 80853372 ff03b000 ff0523d0 c0006280 nt+0x3c965
b81e2b14 b3b9cbd1 ff03b000 00000001 00000000 nt+0x53372
b81e2b7c f72fa072 7b59dfe8 00cec6e8 00000004 Pci9x5x!PLxEvtIoControl+0x151 [m:\zvi_vered\module\fio\windows\module\iocontrol.c @ 151]
b81e2ba0 f72fb3d0 7b59dfe8 00cec6e8 00000004 wdf01000+0x2f072
b81e2bd0 f72fd9ac 00cec6e8 ff313910 84a62010 wdf01000+0x303d0
b81e2bec f72fea36 84a62000 00000000 849b1658 wdf01000+0x329ac
b81e2c0c f7300824 ff313910 84a88e48 84a0f4f0 wdf01000+0x33a36
b81e2c30 f72efa3f 84a88e48 b81e2c50 8081df65 wdf01000+0x35824
b81e2c3c 8081df65 ff3fc4a8 84a88e48 8497e1a0 wdf01000+0x24a3f
b81e2c50 808f5437 84a88edc 8497e1a0 84a88e48 nt+0x1df65
b81e2c64 808f61bf ff3fc4a8 84a88e48 8497e1a0 nt+0xf5437
b81e2d00 808eed08 0000077c 00000758 00000000 nt+0xf61bf
b81e2d34 8088978c 0000077c 00000758 00000000 nt+0xeed08
b81e2d64 7c8285ec badb0d00 0012fd44 00000000 nt+0x8978c
b81e2d68 badb0d00 0012fd44 00000000 00000000 0x7c8285ec
b81e2d6c 0012fd44 00000000 00000000 00000000 0xbadb0d00
b81e2d70 00000000 00000000 00000000 00000000 0x12fd44
STACK_COMMAND: kb
FOLLOWUP_IP:
Pci9x5x!PLxEvtIoControl+151 [m:\zvi_vered\module\fio\windows\module\iocontrol.c @ 151]
b3b9cbd1 8b4df0 mov ecx,dword ptr [ebp-10h]
FAULTING_SOURCE_CODE:
147: UserMode,
148: MmNonCached ,
149: NULL,
150: FALSE,
151: LowPagePriority);
152: if (!devExt->UserSpaceCommonBuffer)
153: {
154: KdPrint (("MmMapLockedPagesSpecifyCache failed.\n"));
155: }
156:
SYMBOL_STACK_INDEX: 5
SYMBOL_NAME: Pci9x5x!PLxEvtIoControl+151
FOLLOWUP_NAME: MachineOwner
IMAGE_NAME: Pci9x5x.sys
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner
********************************************************************
Can you help ?
Thanks,
Zvika.