Hi Cédric, >-----Original Message----- >From: Cédric Le Goater <c...@redhat.com> >Subject: Re: [PATCH v3 15/19] hw/pci: Introduce >pci_device_[set|unset]_iommu_device() > >Hello Zhenzhong, > >On 4/29/24 08:50, Zhenzhong Duan wrote: >> From: Yi Liu <yi.l....@intel.com> >> >> pci_device_[set|unset]_iommu_device() call >pci_device_get_iommu_bus_devfn() >> to get iommu_bus->iommu_ops and call [set|unset]_iommu_device >callback to >> set/unset HostIOMMUDevice for a given PCI device. >> >> Signed-off-by: Yi Liu <yi.l....@intel.com> >> Signed-off-by: Yi Sun <yi.y....@linux.intel.com> >> Signed-off-by: Nicolin Chen <nicol...@nvidia.com> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> include/hw/pci/pci.h | 38 >+++++++++++++++++++++++++++++++++++++- >> hw/pci/pci.c | 27 +++++++++++++++++++++++++++ >> 2 files changed, 64 insertions(+), 1 deletion(-) >> >> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h >> index eaa3fc99d8..849e391813 100644 >> --- a/include/hw/pci/pci.h >> +++ b/include/hw/pci/pci.h >> @@ -3,6 +3,7 @@ >> >> #include "exec/memory.h" >> #include "sysemu/dma.h" >> +#include "sysemu/host_iommu_device.h" > >This include directive pulls a Linux header file <linux/iommufd.h> >which doesn't exist on all platforms, such as windows and it breaks >compile. So, > >> >> /* PCI includes legacy ISA access. */ >> #include "hw/isa/isa.h" >> @@ -383,10 +384,45 @@ typedef struct PCIIOMMUOps { >> * >> * @devfn: device and function number >> */ >> - AddressSpace * (*get_address_space)(PCIBus *bus, void *opaque, int >devfn); >> + AddressSpace * (*get_address_space)(PCIBus *bus, void *opaque, int >devfn); >> + /** >> + * @set_iommu_device: attach a HostIOMMUDevice to a vIOMMU >> + * >> + * Optional callback, if not implemented in vIOMMU, then vIOMMU >can't >> + * retrieve host information from the associated HostIOMMUDevice. >> + * >> + * @bus: the #PCIBus of the PCI device. >> + * >> + * @opaque: the data passed to pci_setup_iommu(). >> + * >> + * @devfn: device and function number of the PCI device. >> + * >> + * @dev: the data structure representing host IOMMU device. >> + * >> + * @errp: pass an Error out only when return false >> + * >> + * Returns: 0 if HostIOMMUDevice is attached, or else <0 with errp set. >> + */ >> + int (*set_iommu_device)(PCIBus *bus, void *opaque, int devfn, >> + HostIOMMUDevice *dev, Error **errp); >> + /** >> + * @unset_iommu_device: detach a HostIOMMUDevice from a >vIOMMU >> + * >> + * Optional callback. >> + * >> + * @bus: the #PCIBus of the PCI device. >> + * >> + * @opaque: the data passed to pci_setup_iommu(). >> + * >> + * @devfn: device and function number of the PCI device. >> + */ >> + void (*unset_iommu_device)(PCIBus *bus, void *opaque, int devfn); >> } PCIIOMMUOps; >> >> AddressSpace *pci_device_iommu_address_space(PCIDevice *dev); >> +int pci_device_set_iommu_device(PCIDevice *dev, HostIOMMUDevice >*hiod, >> + Error **errp); > >please include a forward declaration for HostIOMMUDevice instead.
Got it, will do. Maybe using iommu_hw_info_type in include/sysemu/host_iommu_device.h isn't a good idea from start. Thanks Zhenzhong