Mirror the Linux helper of the same name so callers don't have to
open-code the header-type compare.

Replace the open-coded site in pci_ea_init().

Assisted-by: Claude Opus 4.7
Signed-off-by: Sascha Hauer <[email protected]>
---
 drivers/pci/pci.c   |  2 +-
 include/linux/pci.h | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 8d18889109..fc00ec2249 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -334,7 +334,7 @@ static void pci_ea_init(struct pci_dev *dev)
        offset = ea + PCI_EA_FIRST_ENT;
 
        /* Skip DWORD 2 for type 1 functions */
-       if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
+       if (pci_is_bridge(dev))
                offset += 4;
 
        /* parse each EA entry */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index f6511e0095..a2dbaf6ec2 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -123,6 +123,20 @@ struct pci_dev {
 };
 #define        to_pci_dev(d) container_of(d, struct pci_dev, dev)
 
+/**
+ * pci_is_bridge - check if the PCI device is a bridge
+ * @dev: PCI device
+ *
+ * Return true if the PCI device is a bridge of PCI-to-PCI type. Masks the
+ * multi-function flag so a multi-function bridge is still recognised.
+ */
+static inline bool pci_is_bridge(struct pci_dev *dev)
+{
+       u8 type = dev->hdr_type & PCI_HEADER_TYPE_MASK;
+
+       return type == PCI_HEADER_TYPE_BRIDGE;
+}
+
 #define pci_resource_start(dev, bar)   ((dev)->resource[(bar)].start)
 #define pci_resource_end(dev, bar)     ((dev)->resource[(bar)].end)
 #define pci_resource_flags(dev, bar)   ((dev)->resource[(bar)].flags)

-- 
2.47.3


Reply via email to