• Russell King's avatar
    of_mdio: fix MDIO phy device refcounting · f018ae7a
    Russell King authored
    bus_find_device() is defined as:
    
     * This is similar to the bus_for_each_dev() function above, but it
     * returns a reference to a device that is 'found' for later use, as
     * determined by the @match callback.
    
    and it does indeed return a reference-counted pointer to the device:
    
            while ((dev = next_device(&i)))
                    if (match(dev, data) && get_device(dev))
                                            ^^^^^^^^^^^^^^^
                            break;
            klist_iter_exit(&i);
            return dev;
    
    What that means is that when we're done with the struct device, we must
    drop that reference.  Neither of_phy_connect() nor of_phy_attach() did
    this when phy_connect_direct() or phy_attach_direct() failed.
    
    With our previous patch, phy_connect_direct() and phy_attach_direct()
    take a new refcount on the phy device when successful, so we can drop
    our local reference immediatley after these functions, whether or not
    they succeeded.
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Acked-by: default avatarRob Herring <robh@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f018ae7a
of_mdio.c 9.43 KB