1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
mistranslation: 0.858
assembly: 0.802
semantic: 0.779
vnc: 0.774
instruction: 0.762
graphic: 0.757
other: 0.747
device: 0.729
KVM: 0.721
boot: 0.681
socket: 0.680
network: 0.665
pci passthrough doesn´t work
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?
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
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
Triaging old bug tickets ... can you still reproduce this problem with the latest version of QEMU? Or can we close this ticket nowadays?
[Expired for QEMU because there has been no activity for 60 days.]
|