lkml.org 
[lkml]   [2022]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 15/32] vfio: introduce KVM-owned IOMMU type
    Date
    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 <mjrosato@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
    +
    /*
    * The IOCTL interface is designed for extensibility by embedding the
    * structure length (argsz) and flags into structures passed between
    --
    2.27.0
    \
     
     \ /
      Last update: 2022-03-14 20:48    [W:3.767 / U:0.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site