On Fri, Sep 25, 2026 at 12:07:34PM -0700, Jacob Pan wrote: > Add IOMMU_DOMAIN_EXTERNAL for externally managed domains that move or > attach devices to another VM address space provisioned by an external > owner, such as a type 1 hypervisor. > > This is not a paging domain and is not sysfs-selectable as a default > domain type. It requires external owner context, such as a vIOMMU. >
Can't we use a IOMMU_DOMAIN_BLOCKED domain for that, AFAIU, the host never inserts any mapping? Thanks, Mostafa > PV IOMMU drivers are expected to use it when moving a device to a guest > VM with an already-created S2 IOPT. > > Assisted-by: GPT-5.6 Sol > Signed-off-by: Jacob Pan <[email protected]> > --- > drivers/iommu/iommu.c | 2 ++ > include/linux/iommu.h | 9 +++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c > index cd1bca7ede9a..d0bd3ef00379 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -220,6 +220,8 @@ static const char *iommu_domain_type_str(unsigned int t) > return "Translated"; > case IOMMU_DOMAIN_PLATFORM: > return "Platform"; > + case IOMMU_DOMAIN_EXTERNAL: > + return "External"; > default: > return "Unknown"; > } > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > index ac43b8b93f14..ede77b90f0fd 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -188,6 +188,7 @@ enum iommu_domain_cookie_type { > > #define __IOMMU_DOMAIN_NESTED (1U << 6) /* User-managed address > space nested > on a stage-2 translation */ > +#define __IOMMU_DOMAIN_EXTERNAL (1U << 7) /* Externally managed > translation */ > > #define IOMMU_DOMAIN_ALLOC_FLAGS ~__IOMMU_DOMAIN_DMA_FQ > /* > @@ -207,6 +208,13 @@ enum iommu_domain_cookie_type { > * represented by mm_struct's. > * IOMMU_DOMAIN_PLATFORM - Legacy domain for drivers that do their own > * dma_api stuff. Do not use in new drivers. > + * IOMMU_DOMAIN_EXTERNAL - Externally managed domain for moving/attaching > + * devices to another VM address space > + * provisioned by the external owner, such as > + * a type 1 hypervisor. This is not a > + * sysfs-selectable default domain type; it > + * requires external owner context such as a > + * vIOMMU. > */ > #define IOMMU_DOMAIN_BLOCKED (0U) > #define IOMMU_DOMAIN_IDENTITY (__IOMMU_DOMAIN_PT) > @@ -219,6 +227,7 @@ enum iommu_domain_cookie_type { > #define IOMMU_DOMAIN_SVA (__IOMMU_DOMAIN_SVA) > #define IOMMU_DOMAIN_PLATFORM (__IOMMU_DOMAIN_PLATFORM) > #define IOMMU_DOMAIN_NESTED (__IOMMU_DOMAIN_NESTED) > +#define IOMMU_DOMAIN_EXTERNAL (__IOMMU_DOMAIN_EXTERNAL) > > struct iommu_domain { > unsigned type; > -- > 2.43.0 > >
