• Thierry Reding's avatar
    of: platform: Destroy child devices symmetrically · 70a29209
    Thierry Reding authored
    Iterate over child devices in reverse when unpopulating a platform
    device to make this step symmetrical with the population step. This
    fixes an issue in the Tegra DRM driver where upon module unload the
    DPAUX controller tries to unregister an I2C controller but will end
    up waiting indefinitely because one of the SOR devices is keeping a
    reference to it. Since the SOR devices are instantiated after the
    DPAUX devices, they would only be removed (and hence release their
    reference to the I2C controller) after the DPAUX devices have been
    removed.
    
    While destroying the child devices in reverse order helps in this
    situation, it isn't fully safe to do so either. An even better way
    would be for the child devices to be reordered to match the probe
    order, which would work irrespective of the instantiation order.
    
    However, reordering by probe order would be fairly complicated and
    doesn't fix any known issues, so we'll go with the simpler fix for
    now.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Link: https://lore.kernel.org/r/20200806153650.3883530-1-thierry.reding@gmail.comSigned-off-by: default avatarRob Herring <robh@kernel.org>
    70a29209
platform.c 20 KB