|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 09/12] PCI: Add helper to compute VF Routing ID to pci.h
From: Dimitri Daskalakis <daskald@xxxxxxxx>
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 <daskald@xxxxxxxx>
---
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |