lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 050/167] net: ethernet: ti: am65-cpsw: Fix devlink port register sequence
    Date
    From: Siddharth Vadapalli <s-vadapalli@ti.com>

    [ Upstream commit 0680e20af5fbf41df8a11b11bd9a7c25b2ca0746 ]

    Renaming interfaces using udevd depends on the interface being registered
    before its netdev is registered. Otherwise, udevd reads an empty
    phys_port_name value, resulting in the interface not being renamed.

    Fix this by registering the interface before registering its netdev
    by invoking am65_cpsw_nuss_register_devlink() before invoking
    register_netdev() for the interface.

    Move the function call to devlink_port_type_eth_set(), invoking it after
    register_netdev() is invoked, to ensure that netlink notification for the
    port state change is generated after the netdev is completely initialized.

    Fixes: 58356eb31d60 ("net: ti: am65-cpsw-nuss: Add devlink support")
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Link: https://lore.kernel.org/r/20220706070208.12207-1-s-vadapalli@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/ti/am65-cpsw-nuss.c | 17 ++++++++++-------
    1 file changed, 10 insertions(+), 7 deletions(-)

    diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
    index ea9d073e87fa..901571c2626a 100644
    --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
    +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
    @@ -2467,7 +2467,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
    port->port_id, ret);
    goto dl_port_unreg;
    }
    - devlink_port_type_eth_set(dl_port, port->ndev);
    }

    return ret;
    @@ -2514,6 +2513,7 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)
    static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
    {
    struct device *dev = common->dev;
    + struct devlink_port *dl_port;
    struct am65_cpsw_port *port;
    int ret = 0, i;

    @@ -2530,6 +2530,10 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
    return ret;
    }

    + ret = am65_cpsw_nuss_register_devlink(common);
    + if (ret)
    + return ret;
    +
    for (i = 0; i < common->port_num; i++) {
    port = &common->ports[i];

    @@ -2542,25 +2546,24 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
    i, ret);
    goto err_cleanup_ndev;
    }
    +
    + dl_port = &port->devlink_port;
    + devlink_port_type_eth_set(dl_port, port->ndev);
    }

    ret = am65_cpsw_register_notifiers(common);
    if (ret)
    goto err_cleanup_ndev;

    - ret = am65_cpsw_nuss_register_devlink(common);
    - if (ret)
    - goto clean_unregister_notifiers;
    -
    /* can't auto unregister ndev using devm_add_action() due to
    * devres release sequence in DD core for DMA
    */

    return 0;
    -clean_unregister_notifiers:
    - am65_cpsw_unregister_notifiers(common);
    +
    err_cleanup_ndev:
    am65_cpsw_nuss_cleanup_ndev(common);
    + am65_cpsw_unregister_devlink(common);

    return ret;
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-19 14:38    [W:3.583 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site