0ef77a1bee
pKVM provides mutual distrust between host kernel and protected VMs(pVM) One solution to provide DMA isolation in this model, is to move the IOMMU control to the hypervisor and para-virtualize the IOMMU interface for the host and guest kernel. (none of them have direct access to IOMMU programming interface). In the case of device assignement, the host can't map memory in for the guest kernel (as it is not trusted). So, what mainly needs to be done is to assign a blocking domain, when VFIO assigns the device to user space, so it can't issue any DMA, and when the guest take control it can program the IOMMU through hypervisor with collapsed translation (IOVA->PA directly). Bug: 357781595 Bug: 348382247 Change-Id: Ie424c54d32f43016465de71f24129fea2fe47e59 Signed-off-by: Mostafa Saleh <smostafa@google.com>
111 lines
3.4 KiB
Plaintext
111 lines
3.4 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
menuconfig VFIO
|
|
tristate "VFIO Non-Privileged userspace driver framework"
|
|
select IOMMU_API
|
|
depends on IOMMUFD || !IOMMUFD
|
|
select INTERVAL_TREE
|
|
select VFIO_GROUP if SPAPR_TCE_IOMMU || IOMMUFD=n
|
|
select VFIO_DEVICE_CDEV if !VFIO_GROUP
|
|
select VFIO_CONTAINER if IOMMUFD=n
|
|
help
|
|
VFIO provides a framework for secure userspace device drivers.
|
|
See Documentation/driver-api/vfio.rst for more details.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
if VFIO
|
|
config VFIO_DEVICE_CDEV
|
|
bool "Support for the VFIO cdev /dev/vfio/devices/vfioX"
|
|
depends on IOMMUFD && !SPAPR_TCE_IOMMU
|
|
default !VFIO_GROUP
|
|
help
|
|
The VFIO device cdev is another way for userspace to get device
|
|
access. Userspace gets device fd by opening device cdev under
|
|
/dev/vfio/devices/vfioX, and then bind the device fd with an iommufd
|
|
to set up secure DMA context for device access. This interface does
|
|
not support noiommu.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
config VFIO_GROUP
|
|
bool "Support for the VFIO group /dev/vfio/$group_id"
|
|
default y
|
|
help
|
|
VFIO group support provides the traditional model for accessing
|
|
devices through VFIO and is used by the majority of userspace
|
|
applications and drivers making use of VFIO.
|
|
|
|
If you don't know what to do here, say Y.
|
|
|
|
config VFIO_CONTAINER
|
|
bool "Support for the VFIO container /dev/vfio/vfio"
|
|
select VFIO_IOMMU_TYPE1 if MMU && (X86 || S390 || ARM || ARM64)
|
|
depends on VFIO_GROUP
|
|
default y
|
|
help
|
|
The VFIO container is the classic interface to VFIO for establishing
|
|
IOMMU mappings. If N is selected here then IOMMUFD must be used to
|
|
manage the mappings.
|
|
|
|
Unless testing IOMMUFD say Y here.
|
|
|
|
if VFIO_CONTAINER
|
|
config VFIO_IOMMU_TYPE1
|
|
tristate
|
|
default n
|
|
|
|
config VFIO_IOMMU_SPAPR_TCE
|
|
tristate
|
|
depends on SPAPR_TCE_IOMMU
|
|
default VFIO
|
|
endif
|
|
|
|
config VFIO_NOIOMMU
|
|
bool "VFIO No-IOMMU support"
|
|
depends on VFIO_GROUP
|
|
help
|
|
VFIO is built on the ability to isolate devices using the IOMMU.
|
|
Only with an IOMMU can userspace access to DMA capable devices be
|
|
considered secure. VFIO No-IOMMU mode enables IOMMU groups for
|
|
devices without IOMMU backing for the purpose of re-using the VFIO
|
|
infrastructure in a non-secure mode. Use of this mode will result
|
|
in an unsupportable kernel and will therefore taint the kernel.
|
|
Device assignment to virtual machines is also not possible with
|
|
this mode since there is no IOMMU to provide DMA translation.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
config VFIO_PKVM_IOMMU
|
|
bool "VFIO pKVM IOMMU"
|
|
depends on ARM64
|
|
help
|
|
This is needed if you plan to assign devices to pKVM protected virtual
|
|
machines. PKVM_IOMMU, mostly does nothing as the hypervisor ensured DMA
|
|
isolation and would provide a guest pvIOMMU interface if configured.
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
config VFIO_VIRQFD
|
|
bool
|
|
select EVENTFD
|
|
default n
|
|
|
|
config VFIO_DEBUGFS
|
|
bool "Export VFIO internals in DebugFS"
|
|
depends on DEBUG_FS
|
|
help
|
|
Allows exposure of VFIO device internals. This option enables
|
|
the use of debugfs by VFIO drivers as required. The device can
|
|
cause the VFIO code create a top-level debug/vfio directory
|
|
during initialization, and then populate a subdirectory with
|
|
entries as required.
|
|
|
|
source "drivers/vfio/pci/Kconfig"
|
|
source "drivers/vfio/platform/Kconfig"
|
|
source "drivers/vfio/mdev/Kconfig"
|
|
source "drivers/vfio/fsl-mc/Kconfig"
|
|
source "drivers/vfio/cdx/Kconfig"
|
|
endif
|
|
|
|
source "virt/lib/Kconfig"
|