[vfio-users] BSOD when installing drivers for R9 290

Eric Griffith egriffith92 at gmail.com
Mon Feb 22 20:58:20 UTC 2016


On Thu, Jan 28, 2016 at 8:47 PM, Stewart Adam <maillist at diffingo.com> wrote:

> On 2016-01-21 12:32 PM, Eric Griffith wrote:
>
>>
>> On Jan 17, 2016 16:10, "Stewart Adam" <maillist at diffingo.com
>> <mailto:maillist at diffingo.com>> wrote:
>>  >
>>  > On 2016-01-17 1:27 PM, Eric Griffith wrote:
>>  >>
>>  >> On Jan 17, 2016 13:15, "Stewart Adam" <maillist at diffingo.com
>> <mailto:maillist at diffingo.com>
>>  >> <mailto:maillist at diffingo.com <mailto:maillist at diffingo.com>>> wrote:
>>  >>  >
>>  >>  > On 2016-01-07 11:30 AM, Eric Griffith wrote:
>>  >>  >>
>>  >>  >> My problem is.. The Win7 (and Win8.1) guests are perfectly fine
>> and
>> stable
>>  >>  >> until I try to install the amd crimson drivers. Then Windows
>> BSODs,
>> yelling
>>  >>  >> about an unhandled exception. If I unpack the install and install
>> things
>>  >>  >> piecemeal, then I can install the HDMI audio driver, and
>> everything else
>>  >>  >> okay...except for the display driver. Installing the display
>> driver
>> causes
>>  >>  >> the BSOD.
>>  >>  >
>>  >>  > How are you booting the guest (e.g. manually executing QEMU, or
>> manually
>>  >> created libvirt XML or virt-manager+libvirt)?
>>  >>  >
>>  >>
>>  >> Virt-manager+libvirt
>>  >>
>>  >>  > I had a very similar symptom on my guest, in the end it was the
>> guest's
>>  >> machine flag "vmport=off" that virt-manager had added that resulted
>> in the
>>  >> hang/BSOD upon installation of the driver.
>>  >>
>>  >> I tried removing the vmport=off flag but still BSOD'ed :(
>>  >>
>>  >> > After attempting a driver install, does the guest boot correctly
>> but hang
>>  >> when attempting to show the login screen (i.e. when the 3D driver
>> initializes)?
>>  >>
>>  >> Sometimes yes, other times itd just do the boot as if I had never
>> tried to
>>  >> install the driver.
>>  >
>>  >
>>  > Sounds like the same issue I was experiencing... Have you also added a
>> ioh3420 device edited your configuration so that the GPU is attached to it
>> instead the default PCI/PCIE buses? If you're not sure, please attach the
>> output of "virsh dumpxml your-vm-name".
>>
>> I did not do that, I just passed through the card and the card's audio.
>> Are
>> there any available instructions on how to do so?
>>
>> Also I appreciate the pointer, Stewart :)
>>
> Sorry for the delay - here are those instructions:
>
> You'll want to execute 'virsh edit domname' as root to edit your domain's
> config file, and then add this XML after the 'pci-bridge' controller block:
>
>     <controller type='pci' index='3' model='pcie-root-port'>
>       <model name='ioh3420'/>
>       <target chassis='1' port='0x1'/>
>       <alias name='pci.3'/>
>       <address type='pci' domain='0x0000' bus='0x00' slot='0x1c'
> function='0x0' multifunction='on'/>
>     </controller>
>
> Then scroll down to the <hostdev> block for your GPU, and alter it to use
> the controller (bus 3) we just created:
>
>     <hostdev mode='subsystem' type='pci' managed='yes'>
>       <driver name='vfio'/>
>       <source>
>         <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
>       </source>
>       <alias name='hostdev0'/>
>       <address type='pci' domain='0x0000' bus='0x03' slot='0x00'
> function='0x0' multifunction='on'/>
>     </hostdev>
>
> Regards,
> Stewart
>

Hey Stewart, long time no talk. Sorry about the delaying in getting back to
you on this topic, classes really kicking into high gear and life became
kind of crazy.

Copy pasted below is the dumpxml of my Win8.1 VM. I tried to add in the two
code blocks that you linked above, but I got errors when I did so. I've
bolded and marked in red where I added the first code block, the pci
definition, and then did the same for the two devices that make up my GPU.

Edit: just incase anyone's mail client doesn't like the bold / text color
change, I've also off-set the area by adding a blank line.

XML WALL OF TEXT:

<domain type='kvm'>
  <name>win8.1</name>
  <uuid>(UUID)</uuid>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
    <loader readonly='yes'
type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win8.1_VARS.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>core2duo</model>
  </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>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-kvm</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/share/virtio-win/virtio-win-0.1.102.iso'/>
      <target dev='sda' bus='sata'/>
      <readonly/>
      <boot order='3'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/win8.1.qcow2'/>
      <target dev='sdb' bus='sata'/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/Win8.1_English_x64.iso'/>
      <target dev='sdc' bus='sata'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x2'/>
    </controller>

*<!-- ADDED PCI BLOCK HERE -->*

    <controller type='pci' index='0' model='pci-root'/>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:7d:c6:85'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <sound model='ich9'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
    </sound>














*<hostdev mode='subsystem' type='pci' managed='yes'>      <source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>      <address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>    </hostdev>    <hostdev mode='subsystem' type='pci'
managed='yes'>      <source>        <address domain='0x0000' bus='0x01'
slot='0x00' function='0x1'/>      </source>      <address type='pci'
domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>    </hostdev>*
<hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x24f0'/>
        <product id='0x0140'/>
      </source>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc52b'/>
      </source>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0a5c'/>
        <product id='0x21e8'/>
      </source>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09'
function='0x0'/>
    </memballoon>
  </devices>
</domain>


Adding them in was no problem in and of itself, it was saving it that
caused a problem. Virsh didn't like those two definitions. Editing the
"address type=pci" lines of both, and changing THOSE bus= definitions to
say 0x03, instead of 0x00 gives me this error:

error: XML error: Invalid PCI address 0000:03:07.0. slot must be <= 0


Editing the one above it, the "address domain=" line, and changing the bus
from 0x01 to 0x03 gives me this error:

error: XML error: The device information for 0000:00:1c.0 has no PCI
connection types listed


Any thoughts?

Half tempted to say 'screw it' and just hold off on doing a VFIO setup
until I snag an Nvidia Polaris card later this year ><
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/vfio-users/attachments/20160222/35233e91/attachment.htm>


More information about the vfio-users mailing list