aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Auger <eric.auger@redhat.com>2024-06-14 11:52:54 +0200
committerCédric Le Goater <clg@redhat.com>2024-06-24 23:15:30 +0200
commita95264191f10173e27b175ebc4a487520a523d62 (patch)
treedd4d55544e95d8c9d334c7765bf50447a86cf5c7
parent3ad35d9158bde0500aeaea4147345d39ad0ae1c0 (diff)
downloadqemu-a95264191f10173e27b175ebc4a487520a523d62.zip
qemu-a95264191f10173e27b175ebc4a487520a523d62.tar.gz
qemu-a95264191f10173e27b175ebc4a487520a523d62.tar.bz2
HostIOMMUDevice: Store the aliased bus and devfn
Store the aliased bus and devfn in the HostIOMMUDevice. This will be useful to handle info that are iommu group specific and not device specific (such as reserved iova ranges). Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r--hw/pci/pci.c8
-rw-r--r--include/sysemu/host_iommu_device.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index c8a8aab..50b86d5 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2745,11 +2745,15 @@ AddressSpace *pci_device_iommu_address_space(PCIDevice *dev)
bool pci_device_set_iommu_device(PCIDevice *dev, HostIOMMUDevice *hiod,
Error **errp)
{
- PCIBus *iommu_bus;
+ PCIBus *iommu_bus, *aliased_bus;
+ int aliased_devfn;
/* set_iommu_device requires device's direct BDF instead of aliased BDF */
- pci_device_get_iommu_bus_devfn(dev, &iommu_bus, NULL, NULL);
+ pci_device_get_iommu_bus_devfn(dev, &iommu_bus,
+ &aliased_bus, &aliased_devfn);
if (iommu_bus && iommu_bus->iommu_ops->set_iommu_device) {
+ hiod->aliased_bus = aliased_bus;
+ hiod->aliased_devfn = aliased_devfn;
return iommu_bus->iommu_ops->set_iommu_device(pci_get_bus(dev),
iommu_bus->iommu_opaque,
dev->devfn, hiod, errp);
diff --git a/include/sysemu/host_iommu_device.h b/include/sysemu/host_iommu_device.h
index 40e0fa1..ee6c813 100644
--- a/include/sysemu/host_iommu_device.h
+++ b/include/sysemu/host_iommu_device.h
@@ -35,6 +35,8 @@ struct HostIOMMUDevice {
char *name;
void *agent; /* pointer to agent device, ie. VFIO or VDPA device */
+ PCIBus *aliased_bus;
+ int aliased_devfn;
HostIOMMUDeviceCaps caps;
};