479134e9d4
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> |
||
---|---|---|
.. | ||
bdev | ||
blob | ||
blobfs | ||
conf | ||
copy | ||
cunit | ||
env_dpdk | ||
event | ||
ioat | ||
iscsi | ||
json | ||
jsonrpc | ||
log | ||
lvol | ||
nbd | ||
net | ||
nvme | ||
nvmf | ||
rocksdb | ||
rpc | ||
scsi | ||
trace | ||
ut_mock | ||
util | ||
vhost | ||
Makefile |