net: ethernet: ti: am65-cpsw: Fix devlink port register sequence
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: 58356eb31d
("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>
This commit is contained in:
Родитель
029c1c2059
Коммит
0680e20af5
|
@ -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);
|
||||
}
|
||||
devlink_register(common->devlink);
|
||||
return ret;
|
||||
|
@ -2511,6 +2510,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;
|
||||
|
||||
|
@ -2527,6 +2527,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];
|
||||
|
||||
|
@ -2539,25 +2543,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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче