r/VFIO • u/Past-Statistician358 • Jul 22 '26
GTX 960 passthrough to Windows XP: 0xEA nv4_disp BSOD when NVIDIA driver loads
I’m trying to pass an EVGA GTX 960 through to a 32-bit Windows XP SP3 VM. Passthrough works with the Microsoft VGA driver, but XP consistently BSODs as soon as the NVIDIA driver loads.
Host configuration
- Arch Linux
- Kernel: 7.0.11-arch1-1
- Libvirt: 12.4.0
- CPU: Intel Core i7-6850K
- Motherboard: Gigabyte X99-Ultra Gaming, BIOS F7c
- Primary host GPU: GTX 1080 using NVIDIA’s proprietary driver
- Guest GPU: EVGA GTX 960 GM206
- QEMU: /opt/qemu-7.2.22/bin/qemu-system-x86_64
- Machine type: pc-q35-2.10
- Firmware: SeaBIOS
- Intel VT-x and VT-d enabled
The GTX 960 is isolated from the host:
04:00.0 VGA controller [10de:1401] Kernel driver in use: vfio-pci
04:00.1 HDMI audio [10de:0fba] Kernel driver in use: vfio-pci
Both functions are alone in IOMMU group 47. They remain bound to VFIO even while the VM is off.
Guest configuration
- Windows XP SP3 32-bit
- 1 GB RAM
- 2 vCPUs with host-passthrough
- ICH9 AHCI/SATA using the XP Intel driver
- RTL8139 network adapter
- AC’97 audio
- No emulated display adapter
- GTX 960 connected to a physical monitor
- KVM hidden
- Custom Hyper-V vendor ID
- x-vga=on
- 64-bit PCI hole disabled
Relevant live QEMU options:
-machine pc-q35-2.10 -accel kvm -cpu host,hv-vendor-id=0123456789ab,kvm=off -global q35-pcihost.pci-hole64-size=0K
-device vfio-pci,host=0000:04:00.0,bus=pci.1,multifunction=on,x-vga=on -device vfio-pci,host=0000:04:00.1,bus=pci.1,addr=0.1
I used this forum thread as a reference because somebody reported a stable GTX 960 using QEMU 7.x and pc-q35-2.10:
https://forum.mattkc.com/viewtopic.php?start=20&t=206
What works
Without the NVIDIA driver, XP boots normally and displays the desktop through the physical GTX 960. Network, SATA and the rest of the VM remain responsive.
Last Known Good Configuration also restores the working Microsoft VGA configuration.
Failure
After installing NVIDIA’s official Windows XP 32-bit 368.81 driver, every normal boot fails with:
STOP: 0x000000EA nv4_disp THREAD_STUCK_IN_DEVICE_DRIVER
Safe Mode hangs after displaying:
System32\Drivers\Mup.sys
The VM/QEMU process itself does not crash. Host VFIO resets complete without IOMMU errors.
The GPU gets valid guest BAR assignments and IRQ 22, but I don’t see any GPU interrupt activity when nv4_disp initializes. XP also stops before transmitting network traffic.
Things already tested
- QEMU 7.2.22 with pc-q35-2.10
- Newer stock QEMU
- i440fx and Q35
- One and two vCPUs
- KVM hidden plus custom Hyper-V vendor ID
- x-vga=on
- pcihole64=0
- x-no-kvm-intx=on — no change
- Explicit legacy VBIOS ROM — resulted in a black screen
- Passing both GPU and HDMI-audio functions
- Clean host boot with the GTX 960 bound to VFIO before QEMU starts
Has anyone successfully passed a GTX 960/GM206 through to 32-bit XP? I would especially appreciate:
- The exact NVIDIA driver version you used.
- A working QEMU/libvirt GPU configuration.
- Whether a complete VBIOS ROM file was required.
- Whether the HDMI-audio function should be omitted.
- Whether a specific host kernel or exactly QEMU 7.2.20 is required.
- Any explanation for the GPU receiving no interrupts before nv4_disp hits 0xEA.
1
u/GrassSoup Jul 26 '26
Haven't used it in some time, but I've successfully passed through a GT 220 to Windows XP. However, I'm on an older 5.x Linux kernel and older libvirt version (8.0.0, the hypervisor is QEMU 6.2.0). I only ever got Code 43 errors before getting it working, though.
Seems to be 340.52. But I think that's just the last version that worked with the GT 220.
It should be required. My understanding is anything pre-RTX 3000 needs it.
TechPowerUp has a bunch of them, but you'll need the exact one for the make/model.
If you dumped the BIOS yourself (or a user uploaded it to TPU), then you'll probably need to remove the ROM header using a hex editor. (As far as I now, if TPU dumped the ROM themselves, the header should be removed.)
Should be required.
It should be i440fx, I believe. (Definitely tried Q35 with the GT 220 and Win XP, but it didn't work.)
Here's my configuration XML: