[SOLVED] VMs launch without display output when trying to use passthrough and then they start passing through video when they get to the OS

No idea why this happened, but when I used Windows with the passthrough VM, I did not care too much. MacOS on the other hand has does not even video output on the GPU (even eventually).

UEFI on the Windows VM does not output anything, the same goes for the Windows boot manager screen and boot-up screens.

The display turns on when the blue screen of Windows update appears in any shape or form.

I cannot use macOS because of this, and it is a major inconvenience long term too, because major system upgrade progress cannot be determined by just looking at the CPU usage graph.

Here is my VM xml for the Windows machine:

<domain type='kvm'>
  <name>win10</name>
  <uuid>dfa1146c-ed8b-4d6e-8ca7-867a6c22d8a2</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://microsoft.com/win/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static'>16</vcpu>
  <os firmware='efi'>
    <type arch='x86_64' machine='pc-q35-9.0'>hvm</type>
    <firmware>
      <feature enabled='no' name='enrolled-keys'/>
      <feature enabled='no' name='secure-boot'/>
    </firmware>
    <loader readonly='yes' type='pflash'>/usr/share/edk2/x64/OVMF_CODE.fd</loader>
    <nvram template='/usr/share/edk2/x64/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv mode='custom'>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' clusters='1' cores='8' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/mnt/BA6029B160297573/KVMs/win10.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/BA6029B160297573/Downloads/Win10_22H2_EnglishInternational_x64.iso'/>
      <target dev='sdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/BA6029B160297573/Downloads/virtio-win-0.1.262.iso'/>
      <target dev='sdc' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x8'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x9'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0xa'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0xb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0xc'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0xd'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>
    </controller>
    <controller type='pci' index='7' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='7' port='0xe'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/>
    </controller>
    <controller type='pci' index='8' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='8' port='0xf'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x7'/>
    </controller>
    <controller type='pci' index='9' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='9' port='0x10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='10' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='10' port='0x11'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='11' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='11' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='12' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='12' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='13' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='13' port='0x14'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='pci' index='14' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='14' port='0x15'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
    </controller>
    <controller type='pci' index='15' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='15' port='0x16'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
    </controller>
    <controller type='pci' index='16' model='pcie-to-pci-bridge'>
      <model name='pcie-pci-bridge'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:bc:7e:dc'/>
      <source network='default'/>
      <model type='e1000e'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='2'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <sound model='ich9'>
      <codec type='micro'/>
      <audio id='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
    </sound>
    <audio id='1' type='pulseaudio' serverName='/run/user/1000/pulse/native'/>
    <video>
      <model type='cirrus' vram='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x10' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x21' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x21' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc539'/>
      </source>
      <address type='usb' bus='0' port='1'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0a81'/>
        <product id='0x0205'/>
      </source>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    <watchdog model='itco' action='reset'/>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
</domain>

And in case someone needs it I will also include the .xml for my macOS vm, but that one does not even output with a spice server (unless I just use the .sh file to launch it) (I followed the old guide from the passthroughpost website:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>OSX</name>
  <uuid>3737a412-e2d9-4fb6-b51b-8d34cf83301a</uuid>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <vcpu placement='static'>16</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-9.0'>hvm</type>
    <loader readonly='yes' type='pflash'>/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/firmware/OVMF_CODE.fd</loader>
    <nvram>/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/firmware/OVMF_VARS-1024x768.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <pae/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' clusters='1' cores='8' threads='2'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/ESP.qcow2'/>
      <target dev='sda' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/MyDisk.qcow2'/>
      <target dev='sdb' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/BaseSystem.img'/>
      <target dev='sdc' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='usb' index='0' model='piix3-uhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x18'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-to-pci-bridge'>
      <model name='pcie-pci-bridge'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x19'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x1a'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:9a:50:3a'/>
      <source network='default'/>
      <model type='e1000-82545em'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <input type='keyboard' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <audio id='1' type='none'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x21' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x21' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </hostdev>
    <watchdog model='itco' action='reset'/>
    <memballoon model='none'/>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-cpu'/>
    <qemu:arg value='Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc'/>
    <qemu:arg value='-smbios'/>
    <qemu:arg value='type=2'/>
  </qemu:commandline>
</domain>

If there will be other questions, please ask me. I will be more than willing to help you troubleshoot this further.

I don’t think I understand enough about your configuration: what’s the GPU, are you disabling it from the host to pass it into the VM or just running an emulated VGA card?

Where’s the <video/> block for the macOS VM tying the VFIO-bonded GPU to the VM?

Where’s the vbios firmware file listed – so that the video card is primed to display a basic output before loading more complicated graphics drivers?

K3n.

1 Like

My GPU is an RX580, I disable (well, assign the vfio drivers to it) it in the bootloader (so really early). I also have an emulated VGA card (which was for diagnosing the issues), but that does not output anything either.

Blockquote Where’s the <video/> block for the macOS VM tying the VFIO-bonded GPU to the VM?

You saying that tells me that I flopped something, can you please tell me what to do? I downloaded the scripts and files from a guide on Passthrough Post

Here is the vBIOS file listed (still no output initially here and on the Windows VM (which eventually has output)):

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x21' slot='0x00' function='0x0'/>
  </source>
  <rom bar='on' file='/mnt/BA6029B160297573/KVMs/vBIOS.rom'/>
  <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</hostdev>

My bad: the lack of a <video/> block only gets in the way of diagnosing what’s going on. Other stuff online says that vga=QXL is easier to use than Cirrus while setting up.

What works in the .sh file that’s not translating to the macOS xml file? How do you trigger both, and do you see the OVMF UEFI screen first?

K3n.

1 Like

I had more luck with vga=virtio.

I booted the macOS install and now the spice server does output, but when it gets to the part where the dGPU should be initialised it stops loading the system (btop (a topping application on my host) shows no disk utilisation), but before that, I do see my display flashing to life and then showing no signal and shutting down. Really interesting situation.

It boots into safe mode successfully, but only detects the spice server then.

Windows has no issues, except for me not seeing the UEFI screen (I have never seen it on any passthrough system, only through spice).

MASSIVE UPDATE ON THIS:

I am using the OSX-KVM now, as it has shown the best results.

Here is my .xml file for the VM:

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
    <name>macOS</name>
    <uuid>2aca0dd6-cec9-4717-9ab2-0b7b13d111c3</uuid>
    <title>macOS</title>
    <memory unit="KiB">16777216</memory>
    <currentMemory unit="KiB">16777216</currentMemory>
    <vcpu placement="static">16</vcpu>
    <os>
        <type arch="x86_64" machine="pc-q35-4.2">hvm</type>
        <loader readonly="yes" type="pflash">/mnt/BA6029B160297573/KVMs/OSX-KVM/OVMF_CODE.fd</loader>
        <nvram>/mnt/BA6029B160297573/KVMs/OSX-KVM/OVMF_VARS-1920x1080.fd</nvram>
    </os>
    <features>
        <acpi/>
        <apic/>
    </features>
    <cpu mode="custom" match="exact" check="none">
        <model fallback="forbid">qemu64</model>
        <topology sockets="1" dies="1" clusters="1" cores="8" threads="2"/>
    </cpu>
    <clock offset="utc">
        <timer name="rtc" tickpolicy="catchup"/>
        <timer name="pit" tickpolicy="delay"/>
        <timer name="hpet" present="no"/>
    </clock>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
        <emulator>/usr/bin/qemu-system-x86_64</emulator>
        <disk type="file" device="disk">
            <driver name="qemu" type="qcow2" cache="writeback" io="threads"/>
            <source file="/mnt/BA6029B160297573/KVMs/OSX-KVM/OpenCore/OpenCore.qcow2"/>
            <target dev="sda" bus="sata"/>
            <boot order="2"/>
            <address type="drive" controller="0" bus="0" target="0" unit="0"/>
        </disk>
        <disk type="file" device="disk">
            <driver name="qemu" type="qcow2" cache="writeback" io="threads"/>
            <source file="/mnt/BA6029B160297573/KVMs/OSX-KVM/mac_hdd_ng.img"/>
            <target dev="sdb" bus="sata"/>
            <boot order="1"/>
            <address type="drive" controller="0" bus="0" target="0" unit="1"/>
        </disk>
        <disk type="file" device="disk">
            <driver name="qemu" type="raw" cache="writeback"/>
            <source file="/mnt/BA6029B160297573/KVMs/OSX-KVM/BaseSystem.img"/>
            <target dev="sdc" bus="sata"/>
            <boot order="3"/>
            <address type="drive" controller="0" bus="0" target="0" unit="2"/>
        </disk>
        <disk type="file" device="disk">
            <driver name="qemu" type="qcow2"/>
            <source file="/mnt/BA6029B160297573/KVMs/MacVM/macOS-Simple-KVM/MyDisk.qcow2"/>
            <target dev="sdd" bus="sata"/>
            <address type="drive" controller="0" bus="0" target="0" unit="3"/>
        </disk>
        <controller type="sata" index="0">
            <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
        </controller>
        <controller type="pci" index="0" model="pcie-root"/>
        <controller type="pci" index="1" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="1" port="0x8"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/>
        </controller>
        <controller type="pci" index="2" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="2" port="0x9"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
        </controller>
        <controller type="pci" index="3" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="3" port="0xa"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
        </controller>
        <controller type="pci" index="4" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="4" port="0xb"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x3"/>
        </controller>
        <controller type="pci" index="5" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="5" port="0xc"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x4"/>
        </controller>
        <controller type="pci" index="6" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="6" port="0xd"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x5"/>
        </controller>
        <controller type="pci" index="7" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="7" port="0xe"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x6"/>
        </controller>
        <controller type="pci" index="8" model="pcie-root-port">
            <model name="pcie-root-port"/>
            <target chassis="8" port="0xf"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x7"/>
        </controller>
        <controller type="pci" index="9" model="pcie-to-pci-bridge">
            <model name="pcie-pci-bridge"/>
            <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
        </controller>
        <controller type="virtio-serial" index="0">
            <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
        </controller>
        <controller type="usb" index="0" model="ich9-ehci1">
            <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x7"/>
        </controller>
        <controller type="usb" index="0" model="ich9-uhci1">
            <master startport="0"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x0" multifunction="on"/>
        </controller>
        <controller type="usb" index="0" model="ich9-uhci2">
            <master startport="2"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x1"/>
        </controller>
        <controller type="usb" index="0" model="ich9-uhci3">
            <master startport="4"/>
            <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x2"/>
        </controller>
        <interface type="bridge">
            <mac address="52:54:00:e6:85:40"/>
            <source bridge="virbr0"/>
            <model type="e1000e"/>
            <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
        </interface>
        <serial type="pty">
            <target type="isa-serial" port="0">
                <model name="isa-serial"/>
            </target>
        </serial>
        <console type="pty">
            <target type="serial" port="0"/>
        </console>
        <channel type="unix">
            <target type="virtio" name="org.qemu.guest_agent.0"/>
            <address type="virtio-serial" controller="0" bus="0" port="1"/>
        </channel>
        <input type="mouse" bus="ps2"/>
        <input type="keyboard" bus="ps2"/>
        <graphics type="spice" autoport="yes">
            <listen type="address"/>
        </graphics>
        <audio id="1" type="spice"/>
        <video>
            <model type="virtio" heads="1" primary="yes"/>
            <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
        </video>
        <hostdev mode="subsystem" type="usb" managed="yes">
            <source>
                <vendor id="0x046d"/>
                <product id="0xc539"/>
            </source>
            <address type="usb" bus="0" port="1"/>
        </hostdev>
        <hostdev mode="subsystem" type="pci" managed="yes">
            <source>
                <address domain="0x0000" bus="0x21" slot="0x00" function="0x0"/>
            </source>
            <rom bar="on" file="/mnt/BA6029B160297573/KVMs/vBIOS.rom"/>
            <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
        </hostdev>
        <hostdev mode="subsystem" type="pci" managed="yes">
            <source>
                <address domain="0x0000" bus="0x21" slot="0x00" function="0x1"/>
            </source>
            <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
        </hostdev>
        <watchdog model="itco" action="reset"/>
        <memballoon model="none"/>
    </devices>
    <qemu:commandline>
        <qemu:arg value="-device"/>
        <qemu:arg value="isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"/>
        <qemu:arg value="-smbios"/>
        <qemu:arg value="type=2"/>
        <qemu:arg value="-usb"/>
        <qemu:arg value="-device"/>
        <qemu:arg value="usb-tablet"/>
        <qemu:arg value="-device"/>
        <qemu:arg value="usb-kbd"/>
        <qemu:arg value="-cpu"/>
        <qemu:arg value="Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"/>
        <qemu:arg value="-global"/>
        <qemu:arg value="ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off"/>
    </qemu:commandline>
</domain>

Notice that there have been changes at the very end:

<qemu:arg value="-global"/>
<qemu:arg value="ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off"/>

I also added the vBIOS file in there, I do not know how much that will be able to help, but whatever it does is fine.

Apparently this enables GPUs to work under macOS, without this I was getting stuck at the IOConsoleUsers 3 log when booting.

Before doing that I was having issues like this (mind you the display connected to the GPU was turning on for a split second (receiving a small amount of signal before shutting off)).

The boot logs on my spice server looked like this (they still do, but more on that later):

Here is a successful boot (with the updated configuration), but again, I never saw this a second time, which is the confusing part:

Here I have the system passing through the GPU, I do not see the login prompt which I speculate is because it is on the secondary spice display, but remember that we do need the spice server because there is no way to view the boot menu (so that is the same problem I had initially, that is not fixed).

My main issue with this now is the why it did not actually show the screen again when I rebooted. It is honestly something I have never seen.

Fixed this by injecting the correct version of the vBIOS files into the Qemu Virtual Machine.