On Thu, Mar 01, 2018 at 06:33:31PM +0800, Liu, Yi L wrote: [...]
> -void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) > +void pci_device_notify_iommu(PCIDevice *dev, PCIDevNotifyType type) > { > - bus->iommu_fn = fn; > + PCIBus *bus = PCI_BUS(pci_get_bus(dev)); > + PCIBus *iommu_bus = bus; > + > + while (iommu_bus && !iommu_bus->iommu_fn && iommu_bus->parent_dev) { > + iommu_bus = PCI_BUS(pci_get_bus(iommu_bus->parent_dev)); > + } > + if (iommu_bus && iommu_bus->notify_fn) { > + iommu_bus->notify_fn(bus, > + iommu_bus->iommu_opaque, > + dev->devfn, > + type); We didn't really check the return code for notify function. What if it failed? If we care, we'd better handle the failure; or we can just define the notify_fn() to return void (now it's int). > + } > + return; I saw many places in the series that you added explicit return for "void" return-typed functions. IMHO all of them can be dropped. > +} Thanks, -- Peter Xu