lkml.org 
[lkml]   [2022]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 3/5] vfio/iommu_type1: Remove the domain->ops comparison
    Date
    The domain->ops validation was added, as a precaution, for mixed-driver
    systems.

    Per Robin's remarks,
    * While bus_set_iommu() still exists, the core code prevents multiple
    drivers from registering, so we can't really run into a situation of
    having a mixed-driver system:
    https://lore.kernel.org/kvm/6e1280c5-4b22-ebb3-3912-6c72bc169982@arm.com/

    * And there's plenty more significant problems than this to fix; in future
    when many can be permitted, we will rely on the IOMMU core code to check
    the domain->ops:
    https://lore.kernel.org/kvm/6575de6d-94ba-c427-5b1e-967750ddff23@arm.com/

    So remove the check in VFIO for simplicity.

    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
    ---
    drivers/vfio/vfio_iommu_type1.c | 32 +++++++++++---------------------
    1 file changed, 11 insertions(+), 21 deletions(-)

    diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
    index f4e3b423a453..11be5f95580b 100644
    --- a/drivers/vfio/vfio_iommu_type1.c
    +++ b/drivers/vfio/vfio_iommu_type1.c
    @@ -2277,29 +2277,19 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
    domain->domain->ops->enforce_cache_coherency(
    domain->domain);

    - /*
    - * Try to match an existing compatible domain. We don't want to
    - * preclude an IOMMU driver supporting multiple bus_types and being
    - * able to include different bus_types in the same IOMMU domain, so
    - * we test whether the domains use the same iommu_ops rather than
    - * testing if they're on the same bus_type.
    - */
    + /* Try to match an existing compatible domain */
    list_for_each_entry(d, &iommu->domain_list, next) {
    - if (d->domain->ops == domain->domain->ops) {
    - iommu_detach_group(domain->domain, group->iommu_group);
    - if (!iommu_attach_group(d->domain,
    - group->iommu_group)) {
    - list_add(&group->next, &d->group_list);
    - iommu_domain_free(domain->domain);
    - kfree(domain);
    - goto done;
    - }
    -
    - ret = iommu_attach_group(domain->domain,
    - group->iommu_group);
    - if (ret)
    - goto out_domain;
    + iommu_detach_group(domain->domain, group->iommu_group);
    + if (!iommu_attach_group(d->domain, group->iommu_group)) {
    + list_add(&group->next, &d->group_list);
    + iommu_domain_free(domain->domain);
    + kfree(domain);
    + goto done;
    }
    +
    + ret = iommu_attach_group(domain->domain, group->iommu_group);
    + if (ret)
    + goto out_domain;
    }

    vfio_test_domain_fgsp(domain);
    --
    2.17.1
    \
     
     \ /
      Last update: 2022-06-30 22:38    [W:2.383 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site