[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/17] vfio/pci: Cache vendor and device ID
From: |
Alex Williamson |
Subject: |
[Qemu-devel] [PATCH 16/17] vfio/pci: Cache vendor and device ID |
Date: |
Wed, 09 Sep 2015 12:31:12 -0600 |
User-agent: |
StGit/0.17.1-dirty |
Simplify access to commonly referenced PCI vendor and device ID by
caching it on the VFIOPCIDevice struct.
Signed-off-by: Alex Williamson <address@hidden>
---
hw/vfio/pci-quirks.c | 18 ++++--------------
hw/vfio/pci.c | 10 +++++-----
hw/vfio/pci.h | 2 ++
3 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
index 03dbcf9..753a6c9 100644
--- a/hw/vfio/pci-quirks.c
+++ b/hw/vfio/pci-quirks.c
@@ -19,12 +19,8 @@
/* Use uin32_t for vendor & device so PCI_ANY_ID expands and cannot match hw */
static bool vfio_pci_is(VFIOPCIDevice *vdev, uint32_t vendor, uint32_t device)
{
- PCIDevice *pdev = &vdev->pdev;
-
- return (vendor == PCI_ANY_ID ||
- vendor == pci_get_word(pdev->config + PCI_VENDOR_ID)) &&
- (device == PCI_ANY_ID ||
- device == pci_get_word(pdev->config + PCI_DEVICE_ID));
+ return (vendor == PCI_ANY_ID || vendor == vdev->vendor_id) &&
+ (device == PCI_ANY_ID || device == vdev->device_id);
}
static bool vfio_is_vga(VFIOPCIDevice *vdev)
@@ -1178,15 +1174,9 @@ out:
void vfio_setup_resetfn_quirk(VFIOPCIDevice *vdev)
{
- PCIDevice *pdev = &vdev->pdev;
- uint16_t vendor, device;
-
- vendor = pci_get_word(pdev->config + PCI_VENDOR_ID);
- device = pci_get_word(pdev->config + PCI_DEVICE_ID);
-
- switch (vendor) {
+ switch (vdev->vendor_id) {
case 0x1002:
- switch (device) {
+ switch (vdev->device_id) {
/* Bonaire */
case 0x6649: /* Bonaire [FirePro W5100] */
case 0x6650:
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index fc50c86..97547a8 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -1222,17 +1222,14 @@ static int vfio_msix_early_setup(VFIOPCIDevice *vdev)
* specific quirk if the device is known or we have a broken configuration.
*/
if (msix->pba_offset >= vdev->bars[msix->pba_bar].region.size) {
- PCIDevice *pdev = &vdev->pdev;
- uint16_t vendor = pci_get_word(pdev->config + PCI_VENDOR_ID);
- uint16_t device = pci_get_word(pdev->config + PCI_DEVICE_ID);
-
/*
* Chelsio T5 Virtual Function devices are encoded as 0x58xx for T5
* adapters. The T5 hardware returns an incorrect value of 0x8000 for
* the VF PBA offset while the BAR itself is only 8k. The correct value
* is 0x1000, so we hard code that here.
*/
- if (vendor == PCI_VENDOR_ID_CHELSIO && (device & 0xff00) == 0x5800) {
+ if (vdev->vendor_id == PCI_VENDOR_ID_CHELSIO &&
+ (vdev->device_id & 0xff00) == 0x5800) {
msix->pba_offset = 0x1000;
} else {
error_report("vfio: Hardware reports invalid configuration, "
@@ -2408,6 +2405,9 @@ static int vfio_initfn(PCIDevice *pdev)
/* QEMU can choose to expose the ROM or not */
memset(vdev->emulated_config_bits + PCI_ROM_ADDRESS, 0xff, 4);
+ vdev->vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID);
+ vdev->device_id = pci_get_word(pdev->config + PCI_DEVICE_ID);
+
/* QEMU can change multi-function devices to single function, or reverse */
vdev->emulated_config_bits[PCI_HEADER_TYPE] =
PCI_HEADER_TYPE_MULTI_FUNCTION;
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index e695952..797e083 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -116,6 +116,8 @@ typedef struct VFIOPCIDevice {
EventNotifier err_notifier;
EventNotifier req_notifier;
int (*resetfn)(struct VFIOPCIDevice *);
+ uint16_t vendor_id;
+ uint16_t device_id;
uint32_t features;
#define VFIO_FEATURE_ENABLE_VGA_BIT 0
#define VFIO_FEATURE_ENABLE_VGA (1 << VFIO_FEATURE_ENABLE_VGA_BIT)
- [Qemu-devel] [PATCH 07/17] vfio/pci: Cleanup ROM blacklist quirk, (continued)
- [Qemu-devel] [PATCH 07/17] vfio/pci: Cleanup ROM blacklist quirk, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 06/17] vfio/pci: Split quirks to a separate file, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 08/17] vfio/pci: Foundation for new quirk structure, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 09/17] vfio/pci: Cleanup ATI 0x3c3 quirk, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 10/17] vfio/pci: Cleanup Nvidia 0x3d0 quirk, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 11/17] vfio/pci: Rework RTL8168 quirk, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 12/17] vfio/pci: Config window quirks, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 13/17] vfio/pci: Config mirror quirk, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 14/17] vfio/pci: Remove old config window and mirror quirks, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 15/17] vfio/pci: Move AMD device specific reset to quirks, Alex Williamson, 2015/09/09
- [Qemu-devel] [PATCH 16/17] vfio/pci: Cache vendor and device ID,
Alex Williamson <=
- [Qemu-devel] [PATCH 17/17] vfio/pci: Add emulated PCI IDs, Alex Williamson, 2015/09/09