On Mon, 14 Mar 2022 15:44:34 -0400
Matthew Rosato <mjros...@linux.ibm.com> wrote:

> s390x will introduce a new IOMMU domain type where the mappings are
> managed by KVM rather than in response to userspace mapping ioctls.  Allow
> for specifying this type on the VFIO_SET_IOMMU ioctl and triggering the
> appropriate iommu interface for overriding the default domain.
> 
> Signed-off-by: Matthew Rosato <mjros...@linux.ibm.com>
> ---
>  drivers/vfio/vfio_iommu_type1.c | 12 +++++++++++-
>  include/uapi/linux/vfio.h       |  6 ++++++
>  2 files changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 9394aa9444c1..0bec97077d61 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -77,6 +77,7 @@ struct vfio_iommu {
>       bool                    nesting;
>       bool                    dirty_page_tracking;
>       bool                    container_open;
> +     bool                    kvm;
>       struct list_head        emulated_iommu_groups;
>  };
>  
> @@ -2203,7 +2204,12 @@ static int vfio_iommu_type1_attach_group(void 
> *iommu_data,
>               goto out_free_group;
>  
>       ret = -EIO;
> -     domain->domain = iommu_domain_alloc(bus);
> +
> +     if (iommu->kvm)
> +             domain->domain = iommu_domain_alloc_type(bus, IOMMU_DOMAIN_KVM);
> +     else
> +             domain->domain = iommu_domain_alloc(bus);
> +
>       if (!domain->domain)
>               goto out_free_domain;
>  
> @@ -2552,6 +2558,9 @@ static void *vfio_iommu_type1_open(unsigned long arg)
>       case VFIO_TYPE1v2_IOMMU:
>               iommu->v2 = true;
>               break;
> +     case VFIO_KVM_IOMMU:
> +             iommu->kvm = true;
> +             break;
>       default:
>               kfree(iommu);
>               return ERR_PTR(-EINVAL);
> @@ -2637,6 +2646,7 @@ static int vfio_iommu_type1_check_extension(struct 
> vfio_iommu *iommu,
>       case VFIO_TYPE1_NESTING_IOMMU:
>       case VFIO_UNMAP_ALL:
>       case VFIO_UPDATE_VADDR:
> +     case VFIO_KVM_IOMMU:
>               return 1;
>       case VFIO_DMA_CC_IOMMU:
>               if (!iommu)
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> index ef33ea002b0b..666edb6957ac 100644
> --- a/include/uapi/linux/vfio.h
> +++ b/include/uapi/linux/vfio.h
> @@ -52,6 +52,12 @@
>  /* Supports the vaddr flag for DMA map and unmap */
>  #define VFIO_UPDATE_VADDR            10
>  
> +/*
> + * The KVM_IOMMU type implies that the hypervisor will control the mappings
> + * rather than userspace
> + */
> +#define VFIO_KVM_IOMMU                       11

Then why is this hosted in the type1 code that exposes a wide variety
of userspace interfaces?  Thanks,

Alex

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to