20/09/2017 13:23, Santosh Shukla: > +/** Device driver supports iova as va */ > +#define RTE_PCI_DRV_IOVA_AS_VA 0X0040
This flag name is surprizing and the comment does not help. For the comment: "Device driver supports I/O virtual addressing" ? For the flag: RTE_PCI_DRV_IOVA ? [...] > /* > - * Get iommu class of pci devices on the bus. This line has been added in previous patch. Please fix it earlier. [...] > +/* > + * Any one of the device has iova as va > + */ > +static inline int > +pci_device_has_iova_va(void) The name of this function does not suggest that it scans every devices. > +{ > + struct rte_pci_device *dev = NULL; > + struct rte_pci_driver *drv = NULL; > + > + FOREACH_DRIVER_ON_PCIBUS(drv) { > + if (drv && drv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) { > + FOREACH_DEVICE_ON_PCIBUS(dev) { > + if (dev->kdrv == RTE_KDRV_VFIO && > + rte_pci_match(drv, dev)) > + return 1; > + } This is the reason of exporting the match function? (note: match() is bus driver function, so it should not be exported) Just because you get every devices without driver filtering? There should be a better solution. Please try to compare drv with dev->driver.