Loading
iommu/arm-smmu-qcom: do not register driver in probe()
Commit 0b4eeee2 ("iommu/arm-smmu-qcom: Register the TBU driver in qcom_smmu_impl_init") intended to also probe the TBU driver when CONFIG_ARM_SMMU_QCOM_DEBUG is disabled, but also moved the corresponding platform_driver_register() call into qcom_smmu_impl_init() which is called from arm_smmu_device_probe(). However, it neither makes sense to register drivers from probe() callbacks of other drivers, nor does the driver core allow registering drivers with a device lock already being held. The latter was revealed by commit dc23806a ("driver core: enforce device_lock for driver_match_device()") leading to a deadlock condition described in [1]. Additionally, it was noted by Robin that the current approach is potentially racy with async probe [2]. Hence, fix this by registering the qcom_smmu_tbu_driver from module_init(). Unfortunately, due to the vendoring of the driver, this requires an indirection through arm-smmu-impl.c. Reported-by:Mark Brown <broonie@kernel.org> Closes: https://lore.kernel.org/lkml/7ae38e31-ef31-43ad-9106-7c76ea0e8596@sirena.org.uk/ Link: https://lore.kernel.org/lkml/DFU7CEPUSG9A.1KKGVW4HIPMSH@kernel.org/ [1] Link: https://lore.kernel.org/lkml/0c0d3707-9ea5-44f9-88a1-a65c62e3df8d@arm.com/ [2] Fixes: dc23806a ("driver core: enforce device_lock for driver_match_device()") Fixes: 0b4eeee2 ("iommu/arm-smmu-qcom: Register the TBU driver in qcom_smmu_impl_init") Acked-by:
Robin Murphy <robin.murphy@arm.com> Tested-by:
Bjorn Andersson <andersson@kernel.org> Reviewed-by:
Bjorn Andersson <andersson@kernel.org> Acked-by:
Konrad Dybcio <konradybcio@kernel.org> Reviewed-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org> Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> #LX2160ARDB Tested-by:
Wang Jiayue <akaieurus@gmail.com> Reviewed-by:
Wang Jiayue <akaieurus@gmail.com> Tested-by:
Mark Brown <broonie@kernel.org> Acked-by:
Joerg Roedel <joerg.roedel@amd.com> Link: https://patch.msgid.link/20260121141215.29658-1-dakr@kernel.org Signed-off-by:
Danilo Krummrich <dakr@kernel.org>