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>
This commit is contained in:
Eric Auger 2024-06-14 11:52:54 +02:00 committed by Cédric Le Goater
parent 3ad35d9158
commit a95264191f
2 changed files with 8 additions and 2 deletions

View file

@ -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);

View file

@ -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;
};