[PATCH v5 02/12] iommufd: Refactor __fault_domain_replace_dev() to be a wrapper of iommu_replace_group_handle()

Yi Liu
2024-11-04T13:25:17Z

There is a wrapper of iommu_attach_group_handle(), so making a wrapper for
iommu_replace_group_handle() for further code refactor. No functional change
intended.

Signed-off-by: Yi Liu <yi.l.liu@intel.com>
---
drivers/iommu/iommufd/fault.c | 50 ++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 24 deletions(-)

diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c
index e590973ce5cf..230d37c17102 100644
--- a/drivers/iommu/iommufd/fault.c
+++ b/drivers/iommu/iommufd/fault.c
@@ -146,33 +146,23 @@ void iommufd_fault_domain_detach_dev(struct iommufd_hw_pagetable *hwpt,
kfree(handle);
}

-static int __fault_domain_replace_dev(struct iommufd_device *idev,
- struct iommufd_hw_pagetable *hwpt,
- struct iommufd_hw_pagetable *old)
+static int
+__fault_domain_replace_dev(struct iommufd_device *idev,
+ struct iommufd_hw_pagetable *hwpt,
+ struct iommufd_hw_pagetable *old)
{
- struct iommufd_attach_handle *handle, *curr = NULL;
+ struct iommufd_attach_handle *handle;
int ret;

- if (old->fault)
- curr = iommufd_device_get_attach_handle(idev);
-
- if (hwpt->fault) {
- handle = kzalloc(sizeof(*handle), GFP_KERNEL);
- if (!handle)
- return -ENOMEM;
-
- handle->idev = idev;
- ret = iommu_replace_group_handle(idev->igroup->group,
- hwpt->domain, &handle->handle);
- } else {
- ret = iommu_replace_group_handle(idev->igroup->group,
- hwpt->domain, NULL);
- }
+ handle = kzalloc(sizeof(*handle), GFP_KERNEL);
+ if (!handle)
+ return -ENOMEM;

- if (!ret && curr) {
- iommufd_auto_response_faults(old, curr);
- kfree(curr);
- }
+ handle->idev = idev;
+ ret = iommu_replace_group_handle(idev->igroup->group,
+ hwpt->domain, &handle->handle);
+ if (ret)
+ kfree(handle);

return ret;
}
@@ -183,6 +173,7 @@ int iommufd_fault_domain_replace_dev(struct iommufd_device *idev,
{
bool iopf_off = !hwpt->fault && old->fault;
bool iopf_on = hwpt->fault && !old->fault;
+ struct iommufd_attach_handle *curr;
int ret;

if (iopf_on) {
@@ -191,13 +182,24 @@ int iommufd_fault_domain_replace_dev(struct iommufd_device *idev,
return ret;
}

- ret = __fault_domain_replace_dev(idev, hwpt, old);
+ curr = iommufd_device_get_attach_handle(idev);
+
+ if (hwpt->fault)
+ ret = __fault_domain_replace_dev(idev, hwpt, old);
+ else
+ ret = iommu_replace_group_handle(idev->igroup->group,
+ hwpt->domain, NULL);
if (ret) {
if (iopf_on)
iommufd_fault_iopf_disable(idev);
return ret;
}

+ if (curr) {
+ iommufd_auto_response_faults(old, curr);
+ kfree(curr);
+ }
+
if (iopf_off)
iommufd_fault_iopf_disable(idev);

--
2.34.1