I’m trying to boot Windows XP in KVM with VGA passthrough however it doesn’t work. Since Windows XP afaik doesn’t support UEFI I need to go with standard BIOS VM (not UEFI).
After booting VM GPU does not start correctly. Nothing shows up. In order to troubleshoot this issue I decided to grab Arch Linux and see what’s inside VM.
So getting it to do anything on i440x chipset is fairly challenging since VNC display doesn’t initialize and as such i need to blindly go through GRUB and then it still sometimes doesn’t switch to VNC display and console only shows “Guest has not initialized display” message. It’s a bit easier on Q35 which detects VNC as “first” GPU and shows TTY and GRUB there. VM does boot up and nothing extraordinary shows up in logs. GPU does fire up display but then it looks like this:
When OS is shutting down it does bring display diown before poweroff so I believe driver does try to perform some form of gentle shutdown but GPU is trashed after that first initialization. Any subsequent boot throws up nouveau errors during boot and GPU stays dead. It requires physical power cycle.
It’s worth to note that on UEFI+OVMF VMs it works just fine every single time, no issues at all. I can boot up, reboot, shutdown, start again and GPU just works.
I tried toggling ROM BAR but it doesn’t seem to do anything. I’m not sure if it’s better to keep it enabled or disabled.
Just to provide more context - I tried to do that before with 3090 with the same result but I kinda figured that maybe 3090 is just too recent GPU to work with 32 bit OS in legacy BIOS mode so this time I decided to plug my old Fermi Quadro 4000 (2GB). It still has Windows XP support so it should be somewhat okay for this use case.
Also please note that host OS driver never claims this GPU when pci-e goes back to host OS because current NVidia drivers do not support Fermi anymore.
Host workstation of course runs in UEFI mode. It’s WRX80 platform.
For now I’m trying x86_64 VM arch to simplify this case by matching host arch as it already doesn’t work but probably in final version it’d be preferable to run in full 32 bit mode (as long as it’s possible at all to reinitialize GPU into 32 bit guest from 64 bit host)
Host OS has Arch Linux with proprietary NVidia drivers but like I said they no longer support Fermi (that said i did not perform any vfio blacklisting on host)
upon further investigation I realized that /dev/fb1 kind of works and I’m able to use apps that use simple framebuffer access and write directly to /dev/fb1. Unfortunately Windows was not able to properly use this device despite having drivers installed Nouveau also fails to run.