none
Windows 7 hang up with a driver for PCI board RRS feed

  • Question

  • Hi,

    I've been using a board, and the board has DPRAM, NVRAM,and PCI9030 chipset for communication between X86 CPU and the board firmware. The device driver for the board works well on Windows XP, but when I try to use the board on Windows 7, Windows hangs up. 

    At first, I thought that interrupt event handling had something to do, but the problem was about NVRAM memory size. 

    Windows hangs up when I try to get virtual memory address for NVRAM by using DeviceIoControl() function while Windows XP works well without any problem.

    Physical NVRAM memory size is 2MB, and I tried to reduce memory size to 16KB by changing memory size information that is contained in EEPROM for PCI9030 chipset. Then problem disappeared. 

    Only difference is just the size. 

    Is there any restrictions regarding memory size on Windows 7 ?

    Could anybody help me solve this problem?


    • Edited by sheld.kim Friday, December 7, 2018 2:42 PM
    Friday, December 7, 2018 2:39 PM

All replies

  • I think you're getting distracted by a coincidence.  Windows doesn't know anything about the size or type of RAM on your PCI board.  All it knows about is your BARs and your interrupts.  Are your RAM regions being exposed as BARs?  There's nothing unusual about a 2MB BAR.

    A lock up usually means either an interrupt storm or a bus protocol violation.  Does your driver have interrupts?  Does your driver handle those?  Have you hooked up a kernel debugger so you can do some tracing?  Is this your own driver, or are you borrowing a vendor's driver?  The PCI9030 is an antique; I wonder if it is perhaps not completely bus-compliant and Windows 7 is more picky.  Or perhaps the driver hasn't been updated to modern standards.

    What does your ioctl do?  It seems odd that a "get the virtual address" request would be the one to lock up.  Are you mapping the BAR into user space?


    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Friday, December 7, 2018 7:29 PM
  • Hi Roberts, 

    Thank you for your reply.

    As I said, at first I thought the problem might happen by interrupt signals coming in too much since I experienced similar situations previously. But it's not the case. Lock up happens when calling DeviceIoControl() to obtain memory address of NVRAM. If I skip calling the routine to do that, it doesn't happen.

    I don't think memory region information has any problem, since it exactly reflects physical memory information, and there hasn't been any problem on Windows XP. 

    As you indicated, I suspect that the driver doesn't meet the standard to be used for Windows 7. Several years ago one of my predecessors developed this driver targeting Windows XP, and there might be some points that must be changed for Windows 7. 

    Primarily, I just wanted to know if there's some obvious distinctions in memory management for device drivers between Windows XP and Windows 7, but I understand there's nothing like it as you mentioned "Windows doesn't know anything about the size or type of RAM on your PCI board. ".

    Thank you for your concern.

    Saturday, December 8, 2018 11:51 AM
  • > Lock up happens when calling DeviceIoControl() to obtain memory address of NVRAM.

    Again, what does the ioctl handler do, exactly?


    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Sunday, December 9, 2018 7:50 AM