[libvirt-users] PCI Passthrough

Michael Hierweck team at edv-serviceteam.net
Mon Jun 25 09:08:03 UTC 2012


Hi,

I'm trying to passthrough legacy PCI ISDN controller to a KVM based
virtual machine:

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

This only worked once. (The device disappeared from the lspci autoput
the host and was listed on the guest.)

After shutting down the virtual maschine it refused to start again. Even
rebooting the host did not help:

Failed to assign irq for "hostdev0": Input/output error
Perhaps you are assigning a device that shares an IRQ with another device?

lspci -t

-[0000:00]-+-00.0
           +-19.0
           +-1a.0
           +-1c.0-[01]----00.0
           +-1c.4-[02]----00.0
           +-1c.5-[03]----00.0
           +-1d.0
           +-1e.0-[04]----00.0
           +-1f.0
           +-1f.2
           \-1f.3

lspci -vv |grep IRQ
        Interrupt: pin A routed to IRQ 44
        Interrupt: pin B routed to IRQ 22
        Interrupt: pin A routed to IRQ 20
        Interrupt: pin B routed to IRQ 48
        Interrupt: pin D routed to IRQ 22
        Interrupt: pin A routed to IRQ 16
        Interrupt: pin A routed to IRQ 16
        Interrupt: pin A routed to IRQ 3
        Interrupt: pin A routed to IRQ 16

The last line "pin A routed to IRQ 16" belongs to my device:

04:00.0 Communication controller: Tiger Jet Network Inc. Tiger100APC
ISDN chipset
        Subsystem: Device 0054:0001
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 16
        Region 0: I/O ports at 2000 [size=256]
        Region 1: Memory at e2600000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [40] Power Management version 1
                Flags: PMEClk- DSI+ D1- D2+ AuxCurrent=0mA
PME(D0+,D1-,D2+,D3hot+,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-


Note: After rebooting the host lscpi claims that "pin A is routed to
interrupt 255" for that device. The invocation to virsh start <vm>
changes that to 16.

Nearly every document about PCI passthrough claims that unshared
interrupts are required. But how can this be achieved? (My BIOS supports
interrupt remapping for VT-d. This setting is enabled.)

Thanks in advance

Michael

-- 
EDV-Serviceteam Annika & Michael Hierweck GbR
Egerstraße 53, 44225 Dortmund (Germany)
http://www.edv-serviceteam.net




More information about the libvirt-users mailing list