[PATCH v2 4/4] iommu: Get DT/ACPI parsing into the proper probe path
Jason Gunthorpe
jgg at ziepe.ca
Tue Apr 22 12:00:36 PDT 2025
On Mon, Apr 21, 2025 at 02:19:35PM -0700, William McVicker wrote:
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 1813cfd0c4bd..6d124447545c 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -1440,8 +1440,8 @@ static void platform_shutdown(struct device *_dev)
>
> static int platform_dma_configure(struct device *dev)
> {
> - struct platform_driver *drv = to_platform_driver(dev->driver);
> struct fwnode_handle *fwnode = dev_fwnode(dev);
> + struct platform_driver *drv;
> enum dev_dma_attr attr;
> int ret = 0;
>
> @@ -1451,8 +1451,12 @@ static int platform_dma_configure(struct device *dev)
> attr = acpi_get_dma_attr(to_acpi_device_node(fwnode));
> ret = acpi_dma_configure(dev, attr);
> }
> - /* @drv may not be valid when we're called from the IOMMU layer */
> - if (ret || !dev->driver || drv->driver_managed_dma)
> + /* @dev->driver may not be valid when we're called from the IOMMU layer */
> + if (ret || !dev->driver)
> + return ret;
> +
> + drv = to_platform_driver(dev->driver);
> + if (drv->driver_managed_dma)
> return ret;
>
> ret = iommu_device_use_default_domain(dev);
The diagnosis looks right to me, but pedantically I think it should
have a READ_ONCE():
struct driver *drv = READ_ONCE(dev->driver);
And then never touch dev->driver again in the function.
Send a proper patch?
Jason
More information about the linux-arm-kernel
mailing list