pci passthrough doesn´t work

Bug #795866 reported by steo
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

Hi all,

I have some problems passing through a pci device to kvm guest.
First I have to say that I´m using the latest kvm-kernel und qemu-kvm from git-tree (Date 11.06.2011).

I want´t to passthrough this device to guest:

lspci-output:

02:00.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)

So at first I have bind the driver to psi-stub:

modprobe -r kvm-intel
modprobe -r kvm
echo "18c3 0720" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:02:00.0 > /sys/bus/pci/devices/0000:02:00.0/driver/unbind
echo 0000:02:00.0 > /sys/bus/pci/drivers/pci-stub/bind
modprobe kvm
modprobe kvm-intel

Then I have assigned device to guest:
-device pci-assign,host=02:00.0

When I start the guest. The device succesfully get´s an msi-IRQ on host-system:

cat /proc/interrupt output:

 32: 0 0 0 0 PCI-MSI-edge kvm_assigned_msi_device

On guest device is visibel:

lspci output:
00:04.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)

Sometimes the device (on guest) get´s an IRQ between 10-16:

00:05.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)
        Subsystem: Micronas Semiconductor Holding AG Device dd00
        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+
        Interrupt: pin A routed to IRQ 11
        Region 0: Memory at f2050000 (32-bit, non-prefetchable) [size=64K]
        Region 1: Memory at f2060000 (32-bit, non-prefetchable) [size=64K]
        Capabilities: [58] Express (v1) Endpoint, MSI 00
                DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 128 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s, Latency L0 unlimited, L1 unlimited
                        ClockPM- Suprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
        Capabilities: [40] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [48] Message Signalled Interrupts: Mask- 64bit- Queue=0/0 Enable-
                Address: 00000000 Data: 0000
        Kernel modules: ngene

In this case the kernel-modul (ngene) can not access the device:

dmesg | grep ngene

[ 69.977900] ngene 0000:00:05.0: PCI INT A -> Link[LNKA] -> GSI 11 (level, high) -> IRQ 11
[ 69.977909] ngene: Found Linux4Media cineS2 DVB-S2 Twin Tuner (v5)
[ 69.978962] ngene 0000:00:05.0: setting latency timer to 64
[ 69.979118] ngene: Device version 1
[ 69.979129] ngene 0000:00:05.0: firmware: requesting ngene_18.fw
[ 69.980884] ngene: Loading firmware file ngene_18.fw.
[ 71.981052] ngene: Command timeout cmd=01 prev=00
[ 71.981205] host_to_ngene (c000): 01 00 00 00 00 00 00 00
[ 71.981457] ngene_to_host (c100): 00 00 00 00 00 00 00 00
[ 71.981704] dev->hosttongene (ec902000): 01 00 00 00 00 00 00 00
[ 71.981963] dev->ngenetohost (ec902100): 00 00 00 00 00 00 00 00
[ 73.985111] ngene: Command timeout cmd=02 prev=00
[ 73.985415] host_to_ngene (c000): 02 04 00 d0 00 04 00 00
[ 73.985684] ngene_to_host (c100): 00 00 00 00 00 00 00 00
[ 73.985931] dev->hosttongene (ec902000): 02 04 00 d0 00 04 00 00
[ 73.986191] dev->ngenetohost (ec902100): 00 00 00 00 00 00 00 00
[ 73.986568] ngene 0000:00:05.0: PCI INT A disabled
[ 73.986584] ngene: probe of 0000:00:05.0 failed with error -1

Sometimes the device (on guest) gets an msi-irq f. e. IRQ 29.
Then kernel-modul (ngene) can succesfully load the driver and all works fine.

Short to say:

HOST GUEST STATUS
MSI-IRQ MSI-IRQ ALL FINE
MSI-IRQ IOAPIC-IRQ DOESN´t WORK

with modinfo I had a look at the kernel-modul if there is way to force msi, but without success.

But I think IRQ between (10-16) should also work because when I load the kernel-modul on host with IRQ (10-16)
it works. (Device only get´s an MSI-IRQ If I start the vm to passthrough)

Do anyone know where can be the problem?

Revision history for this message
steo (steffen-vorbeck) wrote :

Here is the dmesg - output of second device which is currently working on guest with MSI-IRQ 29:

[ 2.137175] ngene 0000:00:04.0: PCI INT A -> Link[LNKD] -> GSI 11 (level, high) -> IRQ 11
[ 2.137183] ngene: Found Linux4Media cineS2 DVB-S2 Twin Tuner (v5)
[ 2.140506] ngene 0000:00:04.0: setting latency timer to 64
[ 2.140679] ngene: Device version 1
[ 2.140693] ngene 0000:00:04.0: firmware: requesting ngene_18.fw
[ 2.214848] ngene: Loading firmware file ngene_18.fw.
[ 2.249797] ngene 0000:00:04.0: irq 29 for MSI/MSI-X

Revision history for this message
steo (steffen-vorbeck) wrote :

lspci - output on guest:

00:04.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)
        Subsystem: Micronas Semiconductor Holding AG Device dd00
        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, Cache Line Size: 64 bytes
        Interrupt: pin A routed to IRQ 29
        Region 0: Memory at f2030000 (32-bit, non-prefetchable) [size=64K]
        Region 1: Memory at f2040000 (32-bit, non-prefetchable) [size=64K]
        Capabilities: <access denied>
        Kernel driver in use: ngene
        Kernel modules: ngene

00:05.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)
        Subsystem: Micronas Semiconductor Holding AG Device dd00
        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+
        Interrupt: pin A routed to IRQ 11
        Region 0: Memory at f2050000 (32-bit, non-prefetchable) [size=64K]
        Region 1: Memory at f2060000 (32-bit, non-prefetchable) [size=64K]
        Capabilities: <access denied>
        Kernel modules: ngene

IRQ 11 not working.
IRQ 29 working

Revision history for this message
Thomas Huth (th-huth) wrote :

Triaging old bug tickets ... can you still reproduce this problem with the latest version of QEMU? Or can we close this ticket nowadays?

Changed in qemu:
status: New → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for QEMU because there has been no activity for 60 days.]

Changed in qemu:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.