From: Jerin Jacob <jer...@marvell.com> Existing logic fails to select IOVA mode as VA if driver request to enable IOVA as VA.
IOVA as VA has more strict requirement than other modes, so enabling positive logic for IOVA as VA selection. This patch also updates the default IOVA mode as PA for PCI devices as it has to deal with DMA engines unlike the virtual devices that may need only IOVA as DC. Fixes: 703458e19c16 ("bus/pci: consider only usable devices for IOVA mode") Signed-off-by: Jerin Jacob <jer...@marvell.com> --- If system has only IOVA as VA devices, with out this patch none of the devices works on top of tree now. Request to review and close it for RC1. --- drivers/bus/pci/linux/pci.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index 33c8ea7e9..99636831e 100644 --- a/drivers/bus/pci/linux/pci.c +++ b/drivers/bus/pci/linux/pci.c @@ -567,7 +567,7 @@ enum rte_iova_mode pci_device_iova_mode(const struct rte_pci_driver *pdrv, const struct rte_pci_device *pdev) { - enum rte_iova_mode iova_mode = RTE_IOVA_DC; + enum rte_iova_mode iova_mode = RTE_IOVA_PA; static int iommu_no_va = -1; switch (pdev->kdrv) { @@ -581,8 +581,8 @@ pci_device_iova_mode(const struct rte_pci_driver *pdrv, else is_vfio_noiommu_enabled = 0; } - if ((pdrv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) == 0) { - iova_mode = RTE_IOVA_PA; + if (pdrv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) { + iova_mode = RTE_IOVA_VA; } else if (is_vfio_noiommu_enabled != 0) { RTE_LOG(DEBUG, EAL, "Forcing to 'PA', vfio-noiommu mode configured\n"); iova_mode = RTE_IOVA_PA; @@ -592,8 +592,8 @@ pci_device_iova_mode(const struct rte_pci_driver *pdrv, } case RTE_KDRV_NIC_MLX: - if ((pdrv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) == 0) - iova_mode = RTE_IOVA_PA; + if (pdrv->drv_flags & RTE_PCI_DRV_IOVA_AS_VA) + iova_mode = RTE_IOVA_VA; break; case RTE_KDRV_IGB_UIO: -- 2.22.0