[vfio-users] BIOS memory mapping or chipset issue with MMIO prevents IGD pass-through in legacy mode?

globalgorrilla at fastmail.fm globalgorrilla at fastmail.fm
Thu Jul 28 00:30:37 UTC 2016


First, thank you  for your blog posts and your work on vfio and in this
area. 

On Wed, Jul 27, 2016, at 05:20 PM, Alex Williamson wrote:
> On Wed, 27 Jul 2016 17:01:21 -0700
> globalgorrilla at fastmail.fm wrote:
> 
> > Hello,
> > 
> > Do you reckon this is what some bugzilla's find to be a motherboard
> > memory mapping issue or a chipset issue? 
> > 
> > Any ideas on working around it besides opting the IGD out of MMIO? 
> > 
> > Doing that prevents it from being used with vfio-pci and qemu.
> > 
> > ---
> > 
> > i7-4790k, ASUS Z97-WS (BIOS 2403), kernel 4.7, qemu v2.7.0-rc0
> > 
> > % lspci -vvn -s 00:02
> > 00:02.0 0300: 8086:0412 (rev 06) (prog-if 00 [VGA controller])
> >         Subsystem: 1043:8534
> >         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
> >         ParErr- Stepping- SERR- FastB2B- DisINTx-
> >         Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
> >         <TAbort- <MAbort- >SERR- <PERR- INTx-
> >         Latency: 0
> >         Interrupt: pin A routed to IRQ 11
> >         Region 0: Memory at df800000 (64-bit, non-prefetchable)
> >         [size=4M]
> >         Region 2: Memory at b0000000 (64-bit, prefetchable) [size=256M]
> >         Region 4: I/O ports at f000 [size=64]
> >         [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
> >         Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit-
> >                 Address: 00000000  Data: 0000
> >         Capabilities: [d0] Power Management version 2
> >                 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
> >                 PME(D0-,D1-,D2-,D3hot-,D3cold-)
> >                 Status: D3 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> >         Capabilities: [a4] PCI Advanced Features
> >                 AFCap: TP+ FLR+
> >                 AFCtrl: FLR-
> >                 AFStatus: TP-
> >         Kernel driver in use: vfio-pci
> >         Kernel modules: i915
> > 
> > % cat /proc/cmdline
> > ... intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G
> > hugepages=16 kvm.ignore_msrs=1 intremap=no_x2apic_optout console=ttyS0
> > video=vesafb:off,efifb:off ...
> > 
> > % cat /etc/modprobe.d/blacklist.conf 
> > blacklist efifb
> > install efifb /bin/false
> > 
> > % cat /etc/modprobe.d/vfio.conf 
> > options vfio-pci ids=8086:0412
> > ---
> > 
> > First  I re-built the kernel with efifb as a module for the modprobe
> > blacklist to prevent efifb from binding.  Something in systemd-boot?
> 
> Not necessary, the video=efifb:off should take care of it.

That's what I thought as well. Perhaps I missed something  but after I
built it as a module it no longer binds.

>  
> > Now enabling CSM in the BIOS has made the Video ROM available (whilst
> > still booting with UEFI) but qemu still can't enable VGA access and
> > legacy pass-through mode is disabled.
> > 
> > ---
> > 
> > % grep Video /proc/iomem        
> > 00000000-00000000 : Video ROM
> 
> Recent kernels won't show /proc/iomem or /proc/ioport to regular users
> as a security measure.  You need sudo to see anything.

Noted. 

Should I be looking for anything else here? I am able to see that Video
ROM line now after enabling CSM.

> 
> > % /usr/bin/qemu-system-x86_64 -name guest=win10_1 -S \
> > -machine pc-i440fx-2.6,accel=kvm,usb=off \
> > -cpu host -m 8192 \
> > -mem-prealloc -mem-path /dev/hugepages/libvirt/qemu \
> > -smp 6,sockets=1,cores=3,threads=2 \
> > -nographic -no-user-config -nodefaults \
> > -device vfio-pci,host=00:02.0,id=hostdev0,bus=pci.0,addr=0x2 \
> > -msg timestamp=on \
> > -bios /usr/share/qemu/bios.bin
> > 
> > ...
> > [   45.426546] DMAR: DRHD: handling fault status reg 3
> > [   45.484901] DMAR: [DMA Read] Request device [00:02.0] fault addr
> > 8f2c0000 [fault reason 06] PTE Read access is not set
> > [   45.612929] DMAR: DRHD: handling fault status reg 2
> > [   45.671267] DMAR: [DMA Read] Request device [00:02.0] fault addr
> > 8f314000 [fault reason 06] PTE Read access is not set
> > [   45.799288] DMAR: DRHD: handling fault status reg 2
> > [   45.857634] DMAR: [DMA Read] Request device [00:02.0] fault addr
> > 8f3a7000 [fault reason 06] PTE Read access is not set
> > 
> > qemu.log:
> > qemu-system-x86_64: -device
> > vfio-pci,host=00:02.0,id=hostdev0,bus=pci.0,addr=0x2: IGD device
> > 0000:00:02.0 failed to enable VGA access, legacy mode disabled
> 
> Is you kernel built with CONFIG_VFIO_PCI_VGA=y?

Yes.

% zcat /proc/config.gz | grep CONFIG_VFIO_PCI_VGA
CONFIG_VFIO_PCI_VGA=y




More information about the vfio-users mailing list