From: Dimitri Daskalakis <[email protected]> The VF RID computation is identical for SR-IOV and SIOV. Add a common helper so we can share the logic across both.
No functional changes. Assisted-by: Claude:claude-opus-4.7 Signed-off-by: Dimitri Daskalakis <[email protected]> --- drivers/pci/iov.c | 8 ++++---- drivers/pci/pci.h | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 4aed4f6a42c3..5d65413ce98d 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -25,16 +25,16 @@ int pci_iov_virtfn_bus(struct pci_dev *dev, int vf_id) { if (!pci_is_sriov_physfn(dev)) return -EINVAL; - return dev->bus->number + ((dev->devfn + dev->sriov->offset + - dev->sriov->stride * vf_id) >> 8); + return pci_virtfn_routing_id(dev, dev->sriov->offset, + dev->sriov->stride, vf_id) >> 8; } int pci_iov_virtfn_devfn(struct pci_dev *dev, int vf_id) { if (!pci_is_sriov_physfn(dev)) return -EINVAL; - return (dev->devfn + dev->sriov->offset + - dev->sriov->stride * vf_id) & 0xff; + return pci_virtfn_routing_id(dev, dev->sriov->offset, + dev->sriov->stride, vf_id) & 0xff; } EXPORT_SYMBOL_GPL(pci_iov_virtfn_devfn); diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 73b913bcb87a..45411960fd2e 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -1017,6 +1017,18 @@ static inline int pci_resource_num_to_vf_bar(int resno) } #endif /* CONFIG_PCI_IOV */ +#if defined(CONFIG_PCI_IOV) || defined(CONFIG_PCI_SIOV) +/* + * Compute the Routing ID (bus/devfn) for a VF or SDI under @pf, given the + * capability's offset and stride. + */ +static inline u16 pci_virtfn_routing_id(struct pci_dev *pf, u16 offset, + u16 stride, int id) +{ + return (pf->bus->number << 8) + pf->devfn + offset + stride * id; +} +#endif + #ifdef CONFIG_PCIE_TPH void pci_restore_tph_state(struct pci_dev *dev); void pci_save_tph_state(struct pci_dev *dev); -- 2.52.0
