[dpdk-dev] [dpdk-stable] [PATCH v3] bus/pci: forbid VA as IOVA mode if IOMMU address width too small

Thomas Monjalon thomas at monjalon.net
Sat Jan 20 16:30:05 CET 2018


12/01/2018 11:22, Maxime Coquelin:
> Intel VT-d supports different address widths for the IOVAs, from
> 39 bits to 56 bits.
> 
> While recent processors support at least 48 bits, VT-d emulation
> currently only supports 39 bits. It makes DMA mapping to fail in this
> case when using VA as IOVA mode, as user-space virtual addresses uses
> up to 47 bits (see kernel's Documentation/x86/x86_64/mm.txt).
> 
> This patch parses VT-d CAP register value available in sysfs, and
> forbid VA as IOVA mode if the GAW is 39 bits or unknown.
> 
> Fixes: f37dfab21c98 ("drivers/net: enable IOVA mode for Intel PMDs")
> 
> Cc: stable at dpdk.org
> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
[...]
> +	if (fscanf(fp, "%lx", &vtd_cap_reg) != 1) {

Compilation error on 32-bit. Fix:

-       if (fscanf(fp, "%lx", &vtd_cap_reg) != 1) {
+       if (fscanf(fp, "%" PRIx64, &vtd_cap_reg) != 1) {

[...]
> +#elif defined(RTE_ARCH_PPC_64)
> +static bool
> +pci_one_device_iommu_support_va(struct rte_pci_device *dev)
> +{
> +       return false;
> +}
> +#else
> +static bool
> +pci_one_device_iommu_support_va(struct rte_pci_device *dev)
> +{
> +	return true;
> +}
> +#endif

Compilation error on non-x86. Fix:

 #elif defined(RTE_ARCH_PPC_64)
 static bool
-pci_one_device_iommu_support_va(struct rte_pci_device *dev)
+pci_one_device_iommu_support_va(__rte_unused struct rte_pci_device *dev)
 {
        return false;
 }
 #else
 static bool
-pci_one_device_iommu_support_va(struct rte_pci_device *dev)
+pci_one_device_iommu_support_va(__rte_unused struct rte_pci_device *dev)
 {
        return true;
 }

Applied with above fixes, thanks.


More information about the dev mailing list