Browse Source

hw/arm/smmuv3-accel: Add viommu free helper

Move viommu teardown into a helper function and use it from the
last device removal path.

This groups related cleanup logic in one place and improves readability.
It also makes it easier to extend the teardown in future, for example
when freeing related objects such as vEVENTQ.

No functional change.

Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Shameer Kolothum <skolothumtho@nvidia.com>
Message-id: 20260226084456.112142-3-skolothumtho@nvidia.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
master
Shameer Kolothum 5 months ago
committed by Peter Maydell
parent
commit
674d57bf6e
  1. 21
      hw/arm/smmuv3-accel.c

21
hw/arm/smmuv3-accel.c

@ -390,6 +390,20 @@ bool smmuv3_accel_issue_inv_cmd(SMMUv3State *bs, void *cmd, SMMUDevice *sdev,
sizeof(Cmd), &entry_num, cmd, errp);
}
static void smmuv3_accel_free_viommu(SMMUv3AccelState *accel)
{
IOMMUFDViommu *viommu = accel->viommu;
if (!viommu) {
return;
}
iommufd_backend_free_id(viommu->iommufd, accel->bypass_hwpt_id);
iommufd_backend_free_id(viommu->iommufd, accel->abort_hwpt_id);
iommufd_backend_free_id(viommu->iommufd, accel->viommu->viommu_id);
g_free(viommu);
accel->viommu = NULL;
}
static bool
smmuv3_accel_alloc_viommu(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev,
Error **errp)
@ -549,12 +563,7 @@ static void smmuv3_accel_unset_iommu_device(PCIBus *bus, void *opaque,
trace_smmuv3_accel_unset_iommu_device(devfn, idev->devid);
if (QLIST_EMPTY(&accel->device_list)) {
iommufd_backend_free_id(accel->viommu->iommufd, accel->bypass_hwpt_id);
iommufd_backend_free_id(accel->viommu->iommufd, accel->abort_hwpt_id);
iommufd_backend_free_id(accel->viommu->iommufd,
accel->viommu->viommu_id);
g_free(accel->viommu);
accel->viommu = NULL;
smmuv3_accel_free_viommu(accel);
}
}

Loading…
Cancel
Save