bus/pci: forbid IOVA mode if IOMMU address width too small
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 12 Jan 2018 10:22:20 +0000 (11:22 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Sat, 20 Jan 2018 15:25:48 +0000 (16:25 +0100)
commit54a328f552ff2e0098c3f96f9e32302675f2bcf4
tree7125f8416c1d9533372040daf0775ac0088698f6
parentde4a79cf56bec0623f7f73ca82a2cff15f1f38e3
bus/pci: forbid IOVA mode if IOMMU address width too small

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@dpdk.org
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tested-by: Chas Williams <chas3@att.com>
drivers/bus/pci/linux/pci.c