[Linux-kernel-mentees] [PATCH v1] PCI: Return u8 from pci_find_capability()

Bjorn Helgaas helgaas at kernel.org
Fri Dec 4 21:22:58 UTC 2020

I also propose this follow-on patch to do the same for the extended

commit ee8b1c478a9f ("PCI: Return u16 from pci_find_ext_capability() and similar")
Author: Bjorn Helgaas <bhelgaas at google.com>
Date:   Fri Dec 4 15:14:07 2020 -0600

    PCI: Return u16 from pci_find_ext_capability() and similar
    PCI Express Extended Capabilities are in config space between offsets 256
    and 4K.  These offsets all fit in 16 bits.
    Change the return type of pci_find_ext_capability() and supporting
    functions from int to u16 to match the specification.  Many callers use
    "int", which is fine, but there's no need to store more than a u16.
    Signed-off-by: Bjorn Helgaas <bhelgaas at google.com>

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b3761e98377b..85cb873266d3 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -527,11 +527,11 @@ EXPORT_SYMBOL(pci_bus_find_capability);
  * not support it.  Some capabilities can occur several times, e.g., the
  * vendor-specific capability, and this provides a way to find them all.
-int pci_find_next_ext_capability(struct pci_dev *dev, int start, int cap)
+u16 pci_find_next_ext_capability(struct pci_dev *dev, u16 start, int cap)
 	u32 header;
 	int ttl;
-	int pos = PCI_CFG_SPACE_SIZE;
+	u16 pos = PCI_CFG_SPACE_SIZE;
 	/* minimum 8 bytes per capability */
@@ -582,7 +582,7 @@ EXPORT_SYMBOL_GPL(pci_find_next_ext_capability);
  *  %PCI_EXT_CAP_ID_DSN		Device Serial Number
  *  %PCI_EXT_CAP_ID_PWR		Power Budgeting
-int pci_find_ext_capability(struct pci_dev *dev, int cap)
+u16 pci_find_ext_capability(struct pci_dev *dev, int cap)
 	return pci_find_next_ext_capability(dev, 0, cap);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index e615f8abdd79..441e5753da0c 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -381,7 +381,7 @@ struct pci_dev {
 	struct pcie_link_state	*link_state;	/* ASPM link state */
 	unsigned int	ltr_path:1;	/* Latency Tolerance Reporting
 					   supported from root to here */
-	int		l1ss;		/* L1SS Capability pointer */
+	u16		l1ss;		/* L1SS Capability pointer */
 	unsigned int	eetlp_prefix_path:1;	/* End-to-End TLP Prefix */
@@ -1069,8 +1069,8 @@ u8 pci_find_capability(struct pci_dev *dev, int cap);
 u8 pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
 u8 pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
 u8 pci_find_next_ht_capability(struct pci_dev *dev, u8 pos, int ht_cap);
-int pci_find_ext_capability(struct pci_dev *dev, int cap);
-int pci_find_next_ext_capability(struct pci_dev *dev, int pos, int cap);
+u16 pci_find_ext_capability(struct pci_dev *dev, int cap);
+u16 pci_find_next_ext_capability(struct pci_dev *dev, u16 pos, int cap);
 struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
 u64 pci_get_dsn(struct pci_dev *dev);

More information about the Linux-kernel-mentees mailing list