mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
pci,virtio
This further optimizes MSIX handling in virtio-pci. Also included is pci cleanup by Paolo, and pci device assignment fix by Alex. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJQ7ZaiAAoJECgfDbjSjVRpFhcIAJkY4VQ3i7TLnLsnEDOR+FrP 66YLEDwCSiKZ/UW7WERGN3p3tm0hAXLhPoHFqMGRPPV9pdcXI+Eb8v+u0IHVlt+7 DsQ9TIemZkpSMuUJjQbu/RF8k9JV8+X7M6CKnWahq68p0UD/vDX+OgCiGKO/l/zY tENJhwD6M1MMzbxyzd4nCnkf3CPrHFvpPt2VAqQnkCw3wLAtR34SucBjr/dXcjuT arPiV8dNmXHTosdKvcodAWA+0YLLE7Bhz0nLK6eTt5L/UsfdbRN8q9Xdhd5nJjji DjKBJBfwdG5n3r96g7dlb/XdHuQjbFBq3uLmc8H2OdWOrk5PyqeoUA5fdBQxkb8= =vKSI -----END PGP SIGNATURE----- Merge remote-tracking branch 'mst/tags/for_anthony' into staging pci,virtio This further optimizes MSIX handling in virtio-pci. Also included is pci cleanup by Paolo, and pci device assignment fix by Alex. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> * mst/tags/for_anthony: pci-assign: Enable MSIX on device to match guest pci: use constants for devices under the 1B36 device ID, document them ivshmem: use symbolic constant for PCI ID, add to pci-ids.txt virtio-9p: use symbolic constant, add to pci-ids.txt reorganize pci-ids.txt docs: move pci-ids.txt to docs/specs/ vhost: backend masking support vhost: set started flag while start is in progress virtio-net: set/clear vhost_started in reverse order virtio: backend virtqueue notifier masking virtio-pci: cache msix messages kvm: add stub for update msi route msix: add api to access msix message virtio: don't waste irqfds on control vqs
This commit is contained in:
commit
8e9a8681dd
19 changed files with 438 additions and 101 deletions
|
@ -1031,6 +1031,19 @@ static bool assigned_dev_msix_masked(MSIXTableEntry *entry)
|
|||
return (entry->ctrl & cpu_to_le32(0x1)) != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* When MSI-X is first enabled the vector table typically has all the
|
||||
* vectors masked, so we can't use that as the obvious test to figure out
|
||||
* how many vectors to initially enable. Instead we look at the data field
|
||||
* because this is what worked for pci-assign for a long time. This makes
|
||||
* sure the physical MSI-X state tracks the guest's view, which is important
|
||||
* for some VF/PF and PF/fw communication channels.
|
||||
*/
|
||||
static bool assigned_dev_msix_skipped(MSIXTableEntry *entry)
|
||||
{
|
||||
return !entry->data;
|
||||
}
|
||||
|
||||
static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
|
||||
{
|
||||
AssignedDevice *adev = DO_UPCAST(AssignedDevice, dev, pci_dev);
|
||||
|
@ -1041,7 +1054,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
|
|||
|
||||
/* Get the usable entry number for allocating */
|
||||
for (i = 0; i < adev->msix_max; i++, entry++) {
|
||||
if (assigned_dev_msix_masked(entry)) {
|
||||
if (assigned_dev_msix_skipped(entry)) {
|
||||
continue;
|
||||
}
|
||||
entries_nr++;
|
||||
|
@ -1070,7 +1083,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
|
|||
for (i = 0; i < adev->msix_max; i++, entry++) {
|
||||
adev->msi_virq[i] = -1;
|
||||
|
||||
if (assigned_dev_msix_masked(entry)) {
|
||||
if (assigned_dev_msix_skipped(entry)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue