lkml.org 
[lkml]   [2020]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 157/312] net: dsa: slave: fix of-node leak and phy priority
    Date
    From: Johan Hovold <johan@kernel.org>

    commit 0d8f3c67151faaa80e332c254372dca58fb2a9d4 upstream.

    Make sure to drop the reference taken by of_parse_phandle() before
    returning from dsa_slave_phy_setup().

    Note that this also modifies the PHY priority so that any fixed-link
    node is only parsed when no phy-handle is given, which is in accordance
    with the common scheme for this.

    Fixes: 0d8bcdd383b8 ("net: dsa: allow for more complex PHY setups")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/dsa/slave.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/net/dsa/slave.c
    +++ b/net/dsa/slave.c
    @@ -1031,7 +1031,7 @@ static int dsa_slave_phy_setup(struct ds
    p->phy_interface = mode;

    phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
    - if (of_phy_is_fixed_link(port_dn)) {
    + if (!phy_dn && of_phy_is_fixed_link(port_dn)) {
    /* In the case of a fixed PHY, the DT node associated
    * to the fixed PHY is the Port DT node
    */
    @@ -1041,7 +1041,7 @@ static int dsa_slave_phy_setup(struct ds
    return ret;
    }
    phy_is_fixed = true;
    - phy_dn = port_dn;
    + phy_dn = of_node_get(port_dn);
    }

    if (ds->drv->get_phy_flags)
    @@ -1060,6 +1060,7 @@ static int dsa_slave_phy_setup(struct ds
    ret = dsa_slave_phy_connect(p, slave_dev, phy_id);
    if (ret) {
    netdev_err(slave_dev, "failed to connect to phy%d: %d\n", phy_id, ret);
    + of_node_put(phy_dn);
    return ret;
    }
    } else {
    @@ -1068,6 +1069,8 @@ static int dsa_slave_phy_setup(struct ds
    phy_flags,
    p->phy_interface);
    }
    +
    + of_node_put(phy_dn);
    }

    if (p->phy && phy_is_fixed)

    \
     
     \ /
      Last update: 2020-05-08 15:20    [W:4.021 / U:2.852 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site