Hello,
I’m developing a KMDF driver under XP for a pci-vme bridge device. I’m using the latest WinDDK (6001.18002). I’ve based my driver on the kmdf\pcidrv sample. I’m using a checked XP kernel and coinstaller.
My ‘getting started’ approach has been to take the pcidrv sample and disable any hardware specific code, modify the INF file for my device’s vendorID, etc and just get the driver to load and allocate memory/irq resources for my device so it’s not banged-out in dev mgr. This seemed like it should be straight forward enough.
I install the driver under SAFE mode. Then when I boot in normal mode (checked or free XP versions) it causes XP to hang (hang = progress bar keeps ticking away but never get to login screen).
With WinDbg connected, I can break into the kernel and run devnode, arbiter, etc. Here is what I see with devnode :
0: kd> !devnode 0x89f60ed8
DevNode 0x89f60ed8 for PDO 0x89f6de50
Parent 0x89f60008 Sibling 0000000000 Child 0000000000
InstancePath is “PCI
\VEN_10E3&DEV_0000&SUBSYS_00000000&REV_02\4&3abfd0ac&0&28F0”
ServiceName is “GenPCI”
State = DeviceNodeDriversAdded (0x303)
Previous State = DeviceNodeInitialized (0x302)
StateHistory[01] = DeviceNodeInitialized (0x302)
StateHistory[00] = DeviceNodeUninitialized (0x301)
StateHistory[19] = Unknown State (0x0)
…
Flags (0x000400f0) DNF_ENUMERATED, DNF_IDS_QUERIED,
DNF_HAS_BOOT_CONFIG, DNF_BOOT_CONFIG_RESERVED,
DNF_NEEDS_REBALANCE
BootResourcesList at 0xe13a8c30 Version 1.1 Interface 0x5 Bus #0x6
Entry 0 - Memory (0x3) Undetermined Sharing (0)
Flags (0000) - READ_WRITE
Range starts at 0x00000000d7fff000 for 0x1000 bytes
Entry 1 - Interrupt (0x2) Shared (0x3)
Flags (0000) - LEVEL_SENSITIVE
Level 0xb, Vector 0xb, Group 0, Affinity 0xffffffff
IoResList at 0xe14a1178 : Interface 0x5 Bus 0x6 Slot 0x5
Alternative 0 (Version 1.1)
Preferred Descriptor 0 - Memory (0x3) Device Exclusive (0x1)
Flags (0000) - READ_WRITE
0x001000 byte range with alignment 0x000001
d7fff000 - 0xd7ffffff
Alternative Descriptor 1 - Memory (0x3) Device Exclusive (0x1)
Flags (0000) - READ_WRITE
0x001000 byte range with alignment 0x001000
0 - 0xffffffff
Descriptor 2 - DevicePrivate (0x81) Device Exclusive (0x1)
Flags (0000) -
Data: : 0x1 0x0 0x0
Descriptor 3 - Port (0x1) Device Exclusive (0x1)
Flags (0x31) - PORT_IO 16_BIT_DECODE POSITIVE_DECODE
0x001000 byte range with alignment 0x001000
0 - 0xffffffff
Descriptor 4 - DevicePrivate (0x81) Device Exclusive (0x1)
Flags (0000) -
Data: : 0x1 0x1 0x0
Descriptor 5 - Interrupt (0x2) Shared (0x3)
Flags (0000) - LEVEL_SENSITIVE
0x0 - 0xff
********* end of debug output ***********
So, I’m puzzled as to what aspect of this driver is hanging the OS. Obviously it’s not started.
-
Does it have something to do with DNF_NEEDS_REBALANCE ? What does this mean?
-
I don’t have any resource conflicts I can see with arbiter. But what does “Entry 0 - Memory (0x3) Undetermined Sharing (0)” mean and is it significant?
-
Using devobj I see that “Current Irp 00000000” and “Device queue is not busy.” so is it safe to assume my driver isn’t blocking because it’s failed to process some IRPs?
Any help in getting past this point would be greatly appreciated.
Regards,
Brent