[CentOS-virt] Setting up a pci passthrough device

Mon Feb 6 15:48:10 UTC 2012
James B. Byrne <byrnejb at harte-lyne.ca>

On Sat, February 4, 2012 10:39, Nenad Opsenica wrote:
>
>
> On 02/03/2012 05:32 PM, James B. Byrne wrote:
>> Where does this go inside the rest of the guest
>> configuration?
>
> virt-manager GUI places PCI device pass-through inside
> <devices> ...

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/chap-Virtualization_Host_Configuration_and_Guest_Installation_Guide-PCI_Assignment.html

I have followed the instructions in the RedHat reference
above to the best of my ability to understand them.  I add
the pci multi-port serial io card through virt-manager and
it was indeed entered into the virtual machine's
configuration file inside the <devices> tag:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
    </hostdev>


However, when I try and start the virtual machine I get
this error:

Error starting domain: internal error Unable to reset PCI
device 0000:00:03.0: no FLR, PM reset or bus reset
available

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/asyncjob.py",
line 44, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
  File "/usr/share/virt-manager/virtManager/asyncjob.py",
line 65, in tmpcb
    callback(*args, **kwargs)
  File "/usr/share/virt-manager/virtManager/domain.py",
line 1050, in startup
    self._backend.create()
  File "/usr/lib64/python2.6/site-packages/libvirt.py",
line 511, in create
    if ret == -1: raise libvirtError ('virDomainCreate()
failed', dom=self)
libvirtError: internal error Unable to reset PCI device
0000:00:03.0: no FLR, PM reset or bus reset available



The steps I followed were:

1. Check VT-D extensions available and enabled in BIOS - yes

2. Restart virtual host - yes

3. Identify device - yes
   <address domain='0x000' bus='0x00' slot='0x03'
function='0x0'/>

4. Add device to virtual machine configuration - yes
.  .  .
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
</domain>

5. Enable SELinux boolean - yes
   getsebool virt_use_sysfs
     virt_use_sysfs --> on

6. Start virtual machine - fails

Am I making any obvious errors?  Has anyone here
configured and managed to get a multi-port serial card
working with a virtual guest?

-- 
***          E-Mail is NOT a SECURE channel          ***
James B. Byrne                mailto:ByrneJB at Harte-Lyne.ca
Harte & Lyne Limited          http://www.harte-lyne.ca
9 Brockley Drive              vox: +1 905 561 1241
Hamilton, Ontario             fax: +1 905 561 0757
Canada  L8E 3C3