xemu/hw/vfio
Joao Martins 5b1e96e654 vfio/iommufd: Introduce auto domain creation
There's generally two modes of operation for IOMMUFD:

1) The simple user API which intends to perform relatively simple things
with IOMMUs e.g. DPDK. The process generally creates an IOAS and attaches
to VFIO and mainly performs IOAS_MAP and UNMAP.

2) The native IOMMUFD API where you have fine grained control of the
IOMMU domain and model it accordingly. This is where most new feature
are being steered to.

For dirty tracking 2) is required, as it needs to ensure that
the stage-2/parent IOMMU domain will only attach devices
that support dirty tracking (so far it is all homogeneous in x86, likely
not the case for smmuv3). Such invariant on dirty tracking provides a
useful guarantee to VMMs that will refuse incompatible device
attachments for IOMMU domains.

Dirty tracking insurance is enforced via HWPT_ALLOC, which is
responsible for creating an IOMMU domain. This is contrast to the
'simple API' where the IOMMU domain is created by IOMMUFD automatically
when it attaches to VFIO (usually referred as autodomains) but it has
the needed handling for mdevs.

To support dirty tracking with the advanced IOMMUFD API, it needs
similar logic, where IOMMU domains are created and devices attached to
compatible domains. Essentially mimicking kernel
iommufd_device_auto_get_domain(). With mdevs given there's no IOMMU domain
it falls back to IOAS attach.

The auto domain logic allows different IOMMU domains to be created when
DMA dirty tracking is not desired (and VF can provide it), and others where
it is. Here it is not used in this way given how VFIODevice migration
state is initialized after the device attachment. But such mixed mode of
IOMMU dirty tracking + device dirty tracking is an improvement that can
be added on. Keep the 'all of nothing' of type1 approach that we have
been using so far between container vs device dirty tracking.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
[ clg: Added ERRP_GUARD() in iommufd_cdev_autodomains_get() ]
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
2024-07-23 17:14:52 +02:00
..
Kconfig hw/vfio: Move the IGD quirk code to a separate file 2020-02-06 11:55:42 -07:00
amd-xgbe.c Include migration/vmstate.h less 2019-08-16 13:31:52 +02:00
ap.c vfio/ap: Don't initialize HOST_IOMMU_DEVICE with mdev 2024-07-23 17:14:52 +02:00
calxeda-xgmac.c Include migration/vmstate.h less 2019-08-16 13:31:52 +02:00
ccw.c vfio/ccw: Don't initialize HOST_IOMMU_DEVICE with mdev 2024-07-23 17:14:52 +02:00
common.c vfio/iommufd: Don't initialize nor set a HOST_IOMMU_DEVICE with mdev 2024-07-23 17:14:52 +02:00
container-base.c vfio-container-base: Introduce vfio_container_get_iova_ranges() helper 2024-07-09 11:50:37 +02:00
container.c hw/vfio/container: Fix SIGSEV on vfio_container_instance_finalize() 2024-07-23 17:14:52 +02:00
cpr.c vfio/cpr: Make vfio_cpr_register_container() return bool 2024-05-16 16:59:20 +02:00
display.c vfio/display: Fix vfio_display_edid_init() error path 2024-07-09 11:50:37 +02:00
helpers.c vfio/pci: Extract mdev check into an helper 2024-07-23 17:14:52 +02:00
igd.c vfio/igd: Use g_autofree in vfio_probe_igd_bar4_quirk() 2024-05-22 10:04:22 +02:00
iommufd.c vfio/iommufd: Introduce auto domain creation 2024-07-23 17:14:52 +02:00
meson.build vfio: register container for cpr 2024-03-08 22:10:13 +01:00
migration.c vfio/migration: Enhance VFIO migration state tracing 2024-05-16 16:59:20 +02:00
pci-quirks.c vfio/pci-quirks: Make vfio_add_*_cap() return bool 2024-05-22 10:04:22 +02:00
pci.c vfio/iommufd: Don't initialize nor set a HOST_IOMMU_DEVICE with mdev 2024-07-23 17:14:52 +02:00
pci.h vfio/pci-quirks: Make vfio_add_*_cap() return bool 2024-05-22 10:04:22 +02:00
platform.c vfio/platform: Make vfio_populate_device() and vfio_base_device_init() return bool 2024-05-22 10:04:21 +02:00
spapr.c vfio/container: Change VFIOContainerBase to use QOM 2024-06-24 23:15:31 +02:00
trace-events hw/vfio: Remove newline character in trace events 2024-06-10 13:05:27 -04:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00