iommu/arm-smmu: Fix memory leak with respect to TBU data structures

When the TBU devices unbind from the TBU driver, all of the
resources acquired through the devm_* functions are released.
However, the interconnect resources are not acquired through the
devm_* APIs.

Since the TBU driver does not have a remove() call to release the
interconnect resources, this results in a memory leak. Fix this by
adding a remove() call to release the interconnect resources on
device and driver unbind.

Change-Id: Iac6b5a6b1da7ff989ae36775b39c5fa61294270a
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
This commit is contained in:
Isaac J. Manjarres 2020-01-06 16:58:04 -08:00
commit c7e9571e87

View file

@ -5594,12 +5594,21 @@ static int qsmmuv500_tbu_probe(struct platform_device *pdev)
return 0;
}
static int qsmmuv500_tbu_remove(struct platform_device *pdev)
{
struct qsmmuv500_tbu_device *tbu = dev_get_drvdata(&pdev->dev);
arm_smmu_exit_power_resources(tbu->pwr);
return 0;
}
static struct platform_driver qsmmuv500_tbu_driver = {
.driver = {
.name = "qsmmuv500-tbu",
.of_match_table = of_match_ptr(qsmmuv500_tbu_of_match),
},
.probe = qsmmuv500_tbu_probe,
.remove = qsmmuv500_tbu_remove,
};
MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");