numam-spdk/lib
Dariusz Stojaczyk 479134e9d4 vtophys: remap vfio dma memory when necessary
VFIO requires at least one IOMMU group to be added to the
VFIO container to be able to perform any IOMMU operations
on that container. [1] Without any groups added, VFIO_IOMMU_MAP_DMA
would always respond with errno 22 (Invalid argument).

Also, if the last IOMMU group is removed from the container
(device hotremove), all the IOMMU mappings are lost.

In both cases we need to remap vfio memory as soon as the
first IOMMU group is attached. The attach is done inside
DPDK during device attach and we can't hook into it directly.
Instead, this patch hooks into our PCI init/fini callbacks.
There's now a PCI device ref counter in our vfio manager and
a history of all registered memory pages. When the refcount
is increased from 0 to 1, the vtophys will remap all vfio
dma memory.

[1] https://www.kernel.org/doc/Documentation/vfio.txt
"On its own, the container provides little functionality,
with all but a couple version and extension query interfaces
locked away. The user needs to add a group into the container
for the next level of functionality.  [...] With a group
(or groups) attached to a container, the remaining ioctls
become available, enabling access to the VFIO IOMMU
interfaces."

Change-Id: I744e07043dbe7ffd433fc95d604dad39647675f4
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/390655
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-12-11 11:38:38 -05:00
..
bdev astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
blob log: rename SPDK_TRACE_* to SPDK_LOG_* 2017-12-07 12:23:19 -05:00
blobfs astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
conf log: Use SPDK_ERRLOG in lieu of fprintf(stderr 2017-05-09 11:28:28 -07:00
copy astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
cunit include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
env_dpdk vtophys: remap vfio dma memory when necessary 2017-12-11 11:38:38 -05:00
event astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
ioat astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
iscsi astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
json astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
jsonrpc log: rename SPDK_TRACE_* to SPDK_LOG_* 2017-12-07 12:23:19 -05:00
log log: rename SPDK_TRACE_* to SPDK_LOG_* 2017-12-07 12:23:19 -05:00
lvol astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
nbd nbd: move initialization out of kernel thread 2017-12-11 11:11:25 -05:00
net astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
nvme astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
nvmf nvmf: close all the bdevs when delete subsystems. 2017-12-08 17:14:40 -05:00
rocksdb astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
rpc rpc: set g_jsonrpc_server to NULL on close 2017-11-28 16:20:47 -05:00
scsi astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
trace astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
ut_mock test/mock: add pthread_self 2017-09-19 17:15:15 -04:00
util channel: Add spdk_for_each_thread 2017-11-28 15:29:35 -05:00
vhost astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
Makefile lvol: Logical volume implementation 2017-09-14 19:30:54 -04:00