IGPU passthrough not working

Itay1778

Member
Apr 23, 2021
40
4
13
21
Hi, everyone.
I'm trying to pass my IGPU to VM. Currently for Windows and then MacOS (for Windows it's just for testing it works)
For Windows I was able to pass already GPU the GTX 1060 successfully and without much problems, I worked according to a guide available on the internet.
I tried to do the same thing on the IGPU (block drivers, add his ID etc) but it does not work.
Windows does recognize the IGPU and installs its drivers and even detects that something is connected there.
But I do not get any view. The screen says it is not connected to anything. (The IGPU works and the screen works in it I'm sure)
The only error I saw I had was this: vcpu0 guest rip ignored rdmsr
Don't know if it's related but every time I ran the VM that IGPU was in it appeared.
My specifications
I5 7600K
GA-Z270X-Ultra-Gaming
16GB Ram
GTX 1060 6GB
Proxmox Version - 6.3-6
Thanks in advance.
Itay
 
/etc/default/grub
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off,efifb:off irqpoll"
/etc/modules
Code:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
/etc/modprobe.d/iommu_unsafe_interrupts.conf
Code:
options vfio_iommu_type1 allow_unsafe_interrupts=1
/etc/modprobe.d/kvm.conf
Code:
options kvm ignore_msrs=1
options kvm ignore_msrs=Y
/etc/modprobe.d/blacklist.conf
Code:
blacklist radeon
blacklist nouveau
blacklist nvidia
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
/etc/modprobe.d/vfio.conf
Code:
ptions vfio-pci ids=10de:1c03,10de:10f1 disable_vga=1 #NVIDIA
options vfio-pci ids=8086:5912,8086:a2f0 disable_vga=1 #Intel-IGPU
VM Config
Code:
agent: 1
bios: ovmf
boot: order=ide0
cores: 4
efidisk0: local-lvm:vm-100-disk-1,size=4M
hostpci1: 00:02,pcie=1,x-vga=1
ide0: local-lvm:vm-100-disk-0,size=100G,ssd=1
machine: pc-q35-5.2
memory: 8192
name: Windows-10
net0: virtio=9A:7E:08:9E:C3:31,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
scsihw: virtio-scsi-pci
smbios1: uuid=d731961f-6c0b-4988-87cb-54362941edcf
sockets: 1
usb0: host=0c45:7603
usb1: host=046d:c539
vga: none
vmgenid: de0b7860-0c3b-444e-9a7d-b45cbd1087f5
lspci
Code:
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation Skylake PCIe Controller (x16) (rev 05)
00:02.0 Display controller: Intel Corporation HD Graphics 630 (rev 04)
00:08.0 System peripheral: Intel Corporation Skylake Gaussian Mixture Model
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
00:16.0 Communication controller: Intel Corporation 200 Series PCH CSME HECI
00:17.0 SATA controller: Intel Corporation 200 Series PCH SATA controller [AHCI mode]
00:1b.0 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1b.2 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1b.4 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.0 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.2 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.4 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.5 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.6 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1c.7 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1d.0 PCI bridge: Intel Corporation 200 Series PCH PCI Express Root Port (rev f0)
00:1f.0 ISA bridge: Intel Corporation 200 Series PCH LPC Controller (Z270)
00:1f.2 Memory controller: Intel Corporation 200 Series/Z370 Chipset Family Power Management Controller
00:1f.3 Audio device: Intel Corporation 200 Series PCH HD Audio
00:1f.4 SMBus: Intel Corporation 200 Series/Z370 Chipset Family SMBus Controller
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V
01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP106 High Definition Audio Controller (rev a1)
03:00.0 USB controller: ASMedia Technology Inc. ASM2142 USB 3.1 Host Controller
0a:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)
 
Hi Itay,

I'm a noob to to Proxmox too (and Linux in general), but have just been through the same struggles you are having.

I think you'll find that Proxmox grabs the output from the IGPU for itself, even though the Intel graphics is available in the guest OS.
You can test this by connecting a display to the external port, it will display the Proxmox console until you start the guest VM, then blank the screen.
I also have Handbrake encoding on my Windows guest VM, which proves that the IGPU has been passed through correctly. In short, I never managed to get the display output from IGPU.

In the end I used a DisplayLink USB3 adapter and passed that through to the guest as a USB device, it's a software display adapter so no good for gaming etc. but it does work if you are trying to get separate displays from your guests. If you have a USB-C which supports Alt-Display mode, then that would be even better.

Once again, I'll state that I'm a noob, but I did research this for about 2 weeks, with no other solution that I could find.

Hope that helps

DerekG
 
Sorry for being rather pessimistic, but do you know of anyone having success with integrated GPU passthrough with display output? Intel GVT works (and supported by Proxmox) but that does not do output to a display. I think the Windows driver cannot handle an integrated GPU without having full access to the corresponding CPU, as they share resources and memory.
EDIT: Turns out I was wrong about this. People did get it to work with display output on older Proxmox versions.
 
Last edited:
Sorry for being rather pessimistic, but do you know of anyone having success with integrated GPU passthrough with display output? Intel GVT works (and supported by Proxmox) but that does not do output to a display. I think the Windows driver cannot handle an integrated GPU without having full access to the corresponding CPU, as they share resources and memory.
There are dozens of online guides that according to what they say are successful and working for them to pass the IGPU to VM
So I do not know.... I very much hope this is not the case because I have to pass the IGPU to VM because otherwise I will have to spend more money on hardware - money I do not have and as everyone knows hardware is currently in huge inventory shortage
 
Hi Itay,

I'm a noob to to Proxmox too (and Linux in general), but have just been through the same struggles you are having.

I think you'll find that Proxmox grabs the output from the IGPU for itself, even though the Intel graphics is available in the guest OS.
You can test this by connecting a display to the external port, it will display the Proxmox console until you start the guest VM, then blank the screen.
I also have Handbrake encoding on my Windows guest VM, which proves that the IGPU has been passed through correctly. In short, I never managed to get the display output from IGPU.

In the end I used a DisplayLink USB3 adapter and passed that through to the guest as a USB device, it's a software display adapter so no good for gaming etc. but it does work if you are trying to get separate displays from your guests. If you have a USB-C which supports Alt-Display mode, then that would be even better.

Once again, I'll state that I'm a noob, but I did research this for about 2 weeks, with no other solution that I could find.

Hope that helps

DerekG
The only thing I can think of is that it's some kind of bug in Proxmox.
I too have the same problem just as you have. When the IGPU is primary in the BIOS and the drivers are blocked then the Proxmox starts to turn on.... then in the boot process the screen stops and freezes (which I think it does when it gets to the part where it blocks the drivers even though in NVIDIA it is not like that...)
Then when I turn on the VM it basically disconnects the screen and then I just have no output.
And I also tried that I change with me and state that the GPU primary is the GTX and not the IGPU things still do not work.
I will try to connect the USB to HDMI which luckily I already have and I will see if I suddenly have a screen...
 
Hi avw,

I've explored every avenue I could to resolve this issue, I never found a solution other that an alternate graphics display, either with a secondary graphics card, USB-C Alt-Display or software Displaylink adapter.

Just for your reference, I have the IGPU passed through to a 2nd Windows guest, I have the Intel drivers loaded and the GPU is being used for Video encoding, so I don't believe the issue is with the guest OS or drivers.

A lot of the guides are out of date or confusing 1. graphics passthrough (which is very easy on Proxmox 6.3) with 2. graphics passthrough with display output on an HDMI/VGA port. That seems to be where the problem lies, Proxmox actually 'hands' the display output to the guest, but it only outputs a blank display. This can be tested with a display connected to the output port, it shows Proxmox console until the moment the guest VM is started, then a blank screen.

For me, on my mini PC, I only need the display for productivity apps, so no big deal, a USB3 Displaylink adapter is acceptable. But if you need a real graphics card there are external M.2 PCIe to PCI express connection adapters available where you can plug in a full graphics card. However, depending on the Graphics card you may also need an external PSU to power the thing.

I repeat, I'm a noob to Proxmox and in no way an authority. Figuring out why Proxmox or Debian cannot pass the video out is way above my paygrade, and I doubt there is really much of requirement to solve this as most will be using Proxmox as a server with no video out at all.

I hope that helps.

DerekG
 
There are dozens of online guides that according to what they say are successful and working for them to pass the IGPU to VM
Apologies for giving the wrong information. Can you please give a link to guide that uses KVM/QEMU to a working iGPU with display output? Which guide did you follow?
 
So... does anyone have an idea why I do not get a screen output when I try to passthrough the IGPU to VM?
I'm doing a clean install of Proxmox maybe this will help ....
 
Hello again....
So after an in-depth internet search (I searched for hours upon hours)
I found something that might help me: https://github.com/patmagauran/i915ovmfPkg
In short, someone there gave me a line to add to the VM -
Code:
 args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on,romfile=vbios_gvt_uefi.rom
and ROM that should work. But when I add it I get this error:
Code:
kvm: -device vfio-pci,host=00:02.0,addr=0x18,rombar=0,x-igd-opregion=on,romfile=vbios_gvt_uefi.rom: vfio 0000:00:02.0: does not support requested IGD OpRegion feature: No such device
And it was caused by: ,x-igd-opregion=on
That from what I understand is the thing I need to make what I want happen - output from the IGPU to a physical screen
Is this the end of the story and there is nothing to do? Are there other ways?
 
HI Itay1778,

That guide is out of date, now the IGPU info is added to the GRUB line.
Also it's different if you are booting zfs, where you have to insert the iommu=on in the /etc/kernel/cmdline

Also most of those guides are discussing IGPU passthrough are NOT discussing passthrough WITH video output (that is a very important distinction).
I'm currently using a Displaylink USB3 adapter for the video output, with IGPU passthrough to another VM for video encoding, but if you find a way to get the display output, I'm very interested.
 
HI Itay1778,

That guide is out of date, now the IGPU info is added to the GRUB line.
Also it's different if you are booting zfs, where you have to insert the iommu=on in the /etc/kernel/cmdline

Also most of those guides are discussing IGPU passthrough are NOT discussing passthrough WITH video output (that is a very important distinction).
I'm currently using a Displaylink USB3 adapter for the video output, with IGPU passthrough to another VM for video encoding, but if you find a way to get the display output, I'm very interested.
From what I understand, in order to output from iGPU, you need a special ROM for it. There is this project: https://github.com/patmagauran/i915ovmfPkg
That needs to solve this whole problem (that I don't understand why there is a problem from the beginning, and why it just don't work like any regular GPU... but that's what it is)
The problem is that I couldn't compile the ROM, there is a problem there and the ROM that someone there gave me did not work, I got an error - as I said here.
 
Did you try
Code:
hostpci0: 00:02,pcie=1,x-vga=1
or
Code:
hostpci0: 00:02,x-vga=1
Note: hostpci0 vs 1
 
I'm also struggeling with same issue on iGPU passthrough aka gvt-d. I had to patch the kernel in order to workaround a FLR error. I'm not getting any errors in Windows guests (q35) or Ubuntu guests (q35) but the sad thing is that the screen is black. I do have hdmi dummy plug connected to the onboard connector but the sceen is just black if I connect through VNC. I don't know what's causing this. On the host dmesg-w says when starting a VM:

Code:
[  249.116400] kvm [2150]: ignored rdmsr: 0x10f data 0x0
[  249.116420] kvm [2150]: ignored rdmsr: 0x123 data 0x0
[  249.116433] kvm [2150]: ignored rdmsr: 0xc0011020 data 0x0
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!