https://linux-kvm.org/index.php?title=PCITodo&feed=atom&action=history
PCITodo - Revision history
2024-03-28T19:40:11Z
Revision history for this page on the wiki
MediaWiki 1.39.5
https://linux-kvm.org/index.php?title=PCITodo&diff=5002&oldid=prev
Sunshout at 06:03, 18 December 2013
2013-12-18T06:03:21Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 02:03, 18 December 2013</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l3">Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>TODO: add bugzilla entry links.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>TODO: add bugzilla entry links.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== projects in progress. contributions are still very <del style="font-weight: bold; text-decoration: none;">wellcome</del>! ===</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== projects in progress. contributions are still very <ins style="font-weight: bold; text-decoration: none;">welcome</ins>! ===</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* virtio device as PCI Express device</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* virtio device as PCI Express device</div></td></tr>
<!-- diff cache key kvmwiki-kvmwiki_:diff::1.12:old-4865:rev-5002 -->
</table>
Sunshout
https://linux-kvm.org/index.php?title=PCITodo&diff=4865&oldid=prev
Mst at 09:19, 22 August 2013
2013-08-22T09:19:02Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 05:19, 22 August 2013</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l93">Line 93:</td>
<td colspan="2" class="diff-lineno">Line 93:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> send/clear the interrupt quickly.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> send/clear the interrupt quickly.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* Subtractive decoding support</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> Support subtractive decoding in PCI bridges.</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* Support VGA behind a PCI bridge</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> Support VGA devices behind PCI bridges.</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> Good for things like multiple VGA cards.</ins></div></td></tr>
<tr><td colspan="2" class="diff-side-deleted"></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> Requires subtractive decoding.</ins></div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== vague ideas: path to implementation not clear ===</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== vague ideas: path to implementation not clear ===</div></td></tr>
<!-- diff cache key kvmwiki-kvmwiki_:diff::1.12:old-4864:rev-4865 -->
</table>
Mst
https://linux-kvm.org/index.php?title=PCITodo&diff=4864&oldid=prev
Mst at 13:42, 21 August 2013
2013-08-21T13:42:26Z
<p></p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 09:42, 21 August 2013</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l3">Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>TODO: add bugzilla entry links.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>TODO: add bugzilla entry links.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== projects in progress. contributions are still very wellcome!</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== projects in progress. contributions are still very wellcome! <ins style="font-weight: bold; text-decoration: none;">===</ins></div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* virtio device as PCI Express device</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* virtio device as PCI Express device</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l94">Line 94:</td>
<td colspan="2" class="diff-lineno">Line 94:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== vague ideas: path to implementation not clear</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== vague ideas: path to implementation not clear <ins style="font-weight: bold; text-decoration: none;">===</ins></div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Way to figure out proper PCI connectivity options.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Way to figure out proper PCI connectivity options.</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> Issue: How do you know where you can connect a device?</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> Issue: How do you know where you can connect a device?</div></td></tr>
<!-- diff cache key kvmwiki-kvmwiki_:diff::1.12:old-4862:rev-4864 -->
</table>
Mst
https://linux-kvm.org/index.php?title=PCITodo&diff=4862&oldid=prev
Mst: add PCI TODO
2013-08-21T10:38:55Z
<p>add PCI TODO</p>
<p><b>New page</b></p><div>This page should cover all PCI related activity in KVM.<br />
<br />
TODO: add bugzilla entry links.<br />
<br />
=== projects in progress. contributions are still very wellcome!<br />
<br />
* virtio device as PCI Express device<br />
Issue: Express spec requires device can work without IO,<br />
virtio requires IO at the moment.<br />
Plan: add support for memory BARs.<br />
Developer: Michael S. Tsirkin<br />
<br />
* Hotplug for devices behind PCI bridges<br />
Issue: QEMU lacks support for device hotplug behind<br />
pci bridges.<br />
<br />
Plan:<br />
- each bus gets assigned a number 0-255<br />
- generated ACPI code writes this number<br />
to a new BSEL register, then uses existing<br />
UP/DOWN registers to probe slot status;<br />
to eject, write number to BSEL register,<br />
then slot into existing EJ<br />
This is to address the ACPI spec requirement to<br />
avoid config cycle access to any bus except PCI roots.<br />
<br />
Note: ACPI doesn't support adding or removing bridges by hotplug.<br />
We should and prevent removal of bridges by hotplug,<br />
unless they were added by hotplug previously<br />
(and so, are not described by ACPI).<br />
Developer: Michael S. Tsirkin<br />
<br />
* Hotplug for Q35<br />
Issue: QEMU does not support hotplug for Q35<br />
Plan: since we need to support hotplug of PCI devices,<br />
let's use ACPI hotplug for everything<br />
Use same interface as we do for PCI, this way<br />
same ACPI code can be reused.<br />
<br />
Developer: Michael S. Tsirkin<br />
<br />
* Support for different PCI express link width/speed settings<br />
Issue: QEMU currently emulates all links at minimal<br />
width and speed. This means we don't need to emulate<br />
link negotiation, but might in theory confuse guests<br />
for assigned devices.<br />
The issue is complicated by the fact that real link speed<br />
might be limited by the slot where assigned device is put.<br />
Plan: add management interface to control the max link<br />
speed and width for the slot.<br />
Teach management to query this at slot level.<br />
For device, query it from device itself.<br />
Support link width/speed negotiation as per spec.<br />
Developer: Alex Williamson<br />
<br />
=== projects that are not started yet - no owner ===<br />
<br />
* PCI interrupts should be active-low<br />
Issue: PCI INT#x interrupts are normally active-low.<br />
QEMU emulates them as active high. Works fine for<br />
windows and linux but not guaranteed for other guests. <br />
See http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/<br />
<br />
Plan: add support for active-low interrupts in KVM.<br />
Enable this for PCI interrupts.<br />
Change DSDT appropriately.<br />
<br />
Developer: <br />
Testing: stress-test devices with INT#x interrupts<br />
with interrupt sharing in particular<br />
<br />
* PCI master-abort is not emulated correctly<br />
Issue: access to disabled PCI memory normally returns<br />
all-ones (or read) and sets master abort<br />
detected bit in bridge.<br />
For express, it can also trigger AER reporting<br />
when enabled.<br />
QEMU does not emulate any of this: reads return 0,<br />
writes.<br />
Plan: add catch-all memory region with low priority<br />
in bridge, and trigger the required actions.<br />
<br />
* Better modeling for PCI INT#x<br />
Issue: for a device deep down a bridge hierarchy,<br />
we scan the tree upwards on each interrupt,<br />
calling map_irq at each level, this is bad for performance.<br />
Behaviour is also open-coded at each level, this is ugly.<br />
Plan: something similar to MemoryRegion API:<br />
add objects that represent PCI INT#x pings<br />
(maybe pins in general) model their connection at<br />
each level. Each time there's a change, re-map<br />
them. On data path, use pre-computed irq# to<br />
send/clear the interrupt quickly.<br />
<br />
<br />
=== vague ideas: path to implementation not clear<br />
* Way to figure out proper PCI connectivity options.<br />
Issue: How do you know where you can connect a device?<br />
For PCI, this includes the legal bus addresses,<br />
hotplug support for bus,<br />
how the secondary bus is named,<br />
and whether bridges support required addressing modes.<br />
For PCI Express, there are additional options:<br />
root or downstream port,<br />
virtual bridge in root complex/upstream port.<br />
management tools end up hard-coding this information,<br />
based simply on device name, but that's ugly.<br />
Vague idea: add interfaces to figure out what can be<br />
connected to what and how, or at least the function of each device.<br />
People to contact: Laine Stump<br />
<br />
<br />
* Fix AHCI for stability<br />
Not related to PCI directly but modern chipsets<br />
with PCI Express support all use AHCI.<br />
Issue1: AHCI is unstable with windows guests<br />
(win7 fails to boot sometimes)<br />
Issue2: guests sometimes crash when doing ping pong migration<br />
People to contact: Alexander Graf</div>
Mst