mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
Merge tag 'iommu-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu
Pull iommu fixes from Joerg Roedel: - Fix a regression causing a crash on sysfs access of iommu-group specific files - Fix signedness bug in SVA code * tag 'iommu-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: iommu/sva: Fix signedness bug in iommu_sva_alloc_pasid() iommu: Fix crash during syfs iommu_groups/N/type
This commit is contained in:
@@ -34,8 +34,9 @@ static int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t ma
|
||||
}
|
||||
|
||||
ret = ida_alloc_range(&iommu_global_pasid_ida, min, max, GFP_KERNEL);
|
||||
if (ret < min)
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
mm->pasid = ret;
|
||||
ret = 0;
|
||||
out:
|
||||
|
||||
@@ -2891,14 +2891,11 @@ static int iommu_setup_default_domain(struct iommu_group *group,
|
||||
ret = __iommu_group_set_domain_internal(
|
||||
group, dom, IOMMU_SET_DOMAIN_MUST_SUCCEED);
|
||||
if (WARN_ON(ret))
|
||||
goto out_free;
|
||||
goto out_free_old;
|
||||
} else {
|
||||
ret = __iommu_group_set_domain(group, dom);
|
||||
if (ret) {
|
||||
iommu_domain_free(dom);
|
||||
group->default_domain = old_dom;
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
goto err_restore_def_domain;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2911,21 +2908,25 @@ static int iommu_setup_default_domain(struct iommu_group *group,
|
||||
for_each_group_device(group, gdev) {
|
||||
ret = iommu_create_device_direct_mappings(dom, gdev->dev);
|
||||
if (ret)
|
||||
goto err_restore;
|
||||
goto err_restore_domain;
|
||||
}
|
||||
}
|
||||
|
||||
err_restore:
|
||||
if (old_dom) {
|
||||
__iommu_group_set_domain_internal(
|
||||
group, old_dom, IOMMU_SET_DOMAIN_MUST_SUCCEED);
|
||||
iommu_domain_free(dom);
|
||||
old_dom = NULL;
|
||||
}
|
||||
out_free:
|
||||
out_free_old:
|
||||
if (old_dom)
|
||||
iommu_domain_free(old_dom);
|
||||
return ret;
|
||||
|
||||
err_restore_domain:
|
||||
if (old_dom)
|
||||
__iommu_group_set_domain_internal(
|
||||
group, old_dom, IOMMU_SET_DOMAIN_MUST_SUCCEED);
|
||||
err_restore_def_domain:
|
||||
if (old_dom) {
|
||||
iommu_domain_free(dom);
|
||||
group->default_domain = old_dom;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user