On 6/22/23 23:48, Joao Martins wrote:
From: Yi Liu <yi.l....@intel.com>

Refactor pci_device_iommu_address_space() and move the
code that fetches the device bus and iommu bus into its
own private helper pci_device_get_iommu_bus_devfn().

This is in preparation to introduce pci_device_iommu_get_attr()
which will need to use it too.

Where is this routine used ?

Thanks,

C.



Signed-off-by: Yi Liu <yi.l....@intel.com>
[joao: Commit message, and better splitting]
Signed-off-by: Joao Martins <joao.m.mart...@oracle.com>
---
Splitted from v1:
https://lore.kernel.org/all/20210302203827.437645-6-yi.l....@intel.com/
---
  hw/pci/pci.c | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 4e32c09e81d6..90ae92a43d85 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2632,8 +2632,8 @@ static void pci_device_class_base_init(ObjectClass 
*klass, void *data)
          assert(conventional || pcie || cxl);
      }
  }
-
-AddressSpace *pci_device_iommu_address_space(PCIDevice *dev)
+static void pci_device_get_iommu_bus_devfn(PCIDevice *dev, PCIBus **pdevbus,
+                                           PCIBus **pbus, uint8_t *pdevfn)
  {
      PCIBus *bus = pci_get_bus(dev);
      PCIBus *iommu_bus = bus;
@@ -2686,6 +2686,18 @@ AddressSpace *pci_device_iommu_address_space(PCIDevice 
*dev)
iommu_bus = parent_bus;
      }
+
+    *pdevbus = bus;
+    *pbus = iommu_bus;
+    *pdevfn = devfn;
+}
+
+AddressSpace *pci_device_iommu_address_space(PCIDevice *dev)
+{
+    PCIBus *bus, *iommu_bus;
+    uint8_t devfn;
+
+    pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn);
      if (!pci_bus_bypass_iommu(bus) && iommu_bus) {
          if (iommu_bus->iommu_fn) {
             return iommu_bus->iommu_fn(bus, iommu_bus->iommu_opaque, devfn);


Reply via email to