PCI: cache PCIe capability offset
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Thu, 5 Nov 2009 03:05:11 +0000 (12:05 +0900)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 6 Nov 2009 21:59:02 +0000 (13:59 -0800)
There are a lot of codes that searches PCI express capability offset
in the PCI configuration space using pci_find_capability(). Caching it
in the struct pci_dev will reduce unncecessary search. This patch adds
an additional 'pcie_cap' fields into struct pci_dev, which is
initialized at pci device scan time (in set_pcie_port_type()).

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/probe.c
include/linux/pci.h

index 623086f9ba84255ce6f990d8477525035e6b1019..54b9f15014876386fe65aeb002594a925264552d 100644 (file)
@@ -692,6 +692,7 @@ static void set_pcie_port_type(struct pci_dev *pdev)
        if (!pos)
                return;
        pdev->is_pcie = 1;
+       pdev->pcie_cap = pos;
        pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
        pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
 }
index 86c31ac454d1f89fa2a62a3e46d775f33e2a0c74..233b3a0920357dea21ac420bee7551080ab2fda7 100644 (file)
@@ -218,6 +218,7 @@ struct pci_dev {
        unsigned int    class;          /* 3 bytes: (base,sub,prog-if) */
        u8              revision;       /* PCI revision, low byte of class word */
        u8              hdr_type;       /* PCI header type (`multi' flag masked out) */
+       u8              pcie_cap;       /* PCI-E capability offset */
        u8              pcie_type;      /* PCI-E device/port type */
        u8              rom_base_reg;   /* which config register controls the ROM */
        u8              pin;            /* which interrupt pin this device uses */