pci passthrough doesn´t work
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/
echo 0000:02:00.0 > /sys/bus/
echo 0000:02:00.0 > /sys/bus/
modprobe kvm
modprobe kvm-intel
Then I have assigned device to guest:
-device pci-assign,
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_
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]
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?
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