[4/7] bus/pci: avoid call to DMA mask check
Checks
Commit Message
Calling rte_mem_check_dma_mask when memory has not been initialized
yet is wrong. This patch use rte_mem_set_dma_mask instead.
Once memory initialization is done, the dma mask set will be used
for checking memory mapped is within the specified mask.
Fixes: fe822eb8c565 ("bus/pci: use IOVA DMA mask check when setting IOVA mode")
Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
---
drivers/bus/pci/linux/pci.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
Comments
On 31-Oct-18 5:29 PM, Alejandro Lucero wrote:
> Calling rte_mem_check_dma_mask when memory has not been initialized
> yet is wrong. This patch use rte_mem_set_dma_mask instead.
>
> Once memory initialization is done, the dma mask set will be used
> for checking memory mapped is within the specified mask.
>
> Fixes: fe822eb8c565 ("bus/pci: use IOVA DMA mask check when setting IOVA mode")
>
> Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
> ---
> drivers/bus/pci/linux/pci.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
> index 0a81e063b..d87384c72 100644
> --- a/drivers/bus/pci/linux/pci.c
> +++ b/drivers/bus/pci/linux/pci.c
> @@ -590,7 +590,16 @@ pci_one_device_iommu_support_va(struct rte_pci_device *dev)
>
> mgaw = ((vtd_cap_reg & VTD_CAP_MGAW_MASK) >> VTD_CAP_MGAW_SHIFT) + 1;
>
> - return rte_mem_check_dma_mask(mgaw) == 0 ? true : false;
> + /*
> + * Assuming there is no limitation by now. We can not know at this point
> + * because the memory has not been initialized yet. Setting the dma mask
> + * will force a check once memory initialization is done. We can not do
> + * a fallback to IOVA PA now, but if the dma check fails, the error
> + * message should advice for using '--iova-mode pa' if IOVA VA is the
> + * current mode.
> + */
> + rte_mem_set_dma_mask(mgaw);
> + return true;
This is IMO a good solution to the circular dependency between setting
DMA mask and memory init. At least i can't think of a better one :)
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
> }
> #elif defined(RTE_ARCH_PPC_64)
> static bool
>
@@ -590,7 +590,16 @@ pci_one_device_iommu_support_va(struct rte_pci_device *dev)
mgaw = ((vtd_cap_reg & VTD_CAP_MGAW_MASK) >> VTD_CAP_MGAW_SHIFT) + 1;
- return rte_mem_check_dma_mask(mgaw) == 0 ? true : false;
+ /*
+ * Assuming there is no limitation by now. We can not know at this point
+ * because the memory has not been initialized yet. Setting the dma mask
+ * will force a check once memory initialization is done. We can not do
+ * a fallback to IOVA PA now, but if the dma check fails, the error
+ * message should advice for using '--iova-mode pa' if IOVA VA is the
+ * current mode.
+ */
+ rte_mem_set_dma_mask(mgaw);
+ return true;
}
#elif defined(RTE_ARCH_PPC_64)
static bool