devlink reload simplification
Subsystems (12)
v3 cover devlink reload simplification
From: Leon Romanovsky <[email protected]>
Changelog:
v3:
* Rewrote third patch to keep static const nature of ops. This is done by extracting reload ops to separate ops structure.
* Changed commit message in last patch as was suggested by Ido.
v2: https://lore.kernel.org/all/[email protected]
* Dropped const removal patch
* Added new patch to hide struct devlink
* Added new patch to annotate devlink API
* Implemented copy of all callback in devlink ops
v1: https://lore.kernel.org/all/[email protected]
* Missed removal of extra WARN_ON
* Added "ops parameter to macro as Dan suggested.
v0: https://lore.kernel.org/all/[email protected]
-------------------------------------------------------------------
Hi,
This series fixes the bug with mlx5 device, which in some configurations doesn't support devlink reload and shouldn't have any reload statistics like any other net device. Unfortunately, it is not the case in the current implementation of devlink reload.
This fix is done by simplification of internal API.
Thanks
Leon Romanovsky (5):
devlink: Reduce struct devlink exposure
devlink: Annotate devlink API calls
devlink: Allow set reload ops callbacks separately net/mlx5: Separate reload devlink ops for multiport device
devlink: Delete reload enable/disable interface
.../hisilicon/hns3/hns3pf/hclge_devlink.c | 7 +- .../hisilicon/hns3/hns3vf/hclgevf_devlink.c | 7 +- drivers/net/ethernet/mellanox/mlx4/main.c | 10 +- .../net/ethernet/mellanox/mlx5/core/devlink.c | 13 +- .../net/ethernet/mellanox/mlx5/core/main.c | 3 - .../mellanox/mlx5/core/sf/dev/driver.c | 5 +- drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | 2 +- drivers/net/ethernet/mellanox/mlxsw/core.c | 19 +- drivers/net/netdevsim/dev.c | 13 +- include/net/devlink.h | 79 ++------ include/trace/events/devlink.h | 72 ++++---- net/core/devlink.c | 170 ++++++++++++------ 12 files changed, 216 insertions(+), 184 deletions(-)
Signature · 1 line
2.31.1
PATCH v3 1/5 devlink: Reduce struct devlink exposure
From: Leon Romanovsky <[email protected]>
The declaration of struct devlink in general header provokes the situation where internal fields can be accidentally used by the driver authors. In order to reduce such possible situations, let's reduce the namespace exposure of struct devlink.
--- drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | 2 +- include/net/devlink.h | 54 ++-------------- include/trace/events/devlink.h | 72 ++++++++++----------- net/core/devlink.c | 59 +++++++++++++++++ 4 files changed, 100 insertions(+), 87 deletions(-)
drivers/net/ethernet/mellanox/mlxfw/mlxfw.h +1 -1
@@ -19,7 +19,7 @@ struct mlxfw_dev {static inline struct device *mlxfw_dev_dev (struct mlxfw_dev *mlxfw_dev) { -return mlxfw_dev->devlink->dev; +return devlink_to_dev (mlxfw_dev->devlink); }#define MLXFW_PRFX "mlxfw: "
include/net/devlink.h +4 -50
66 lines not on this page · raw message
include/trace/events/devlink.h +36 -36
141 lines not on this page · raw message
net/core/devlink.c +59 -0
65 lines not on this page · raw message
Signature · 1 line
2.31.1
Steven Rostedt
maintainerRe: [PATCH net-next v3 1/5] devlink: Reduce struct devlink exposure
net/core/devlink.c line 74
Quoted 3 lines · On Thu, 7 Oct 2021 09:55:15 +0300 Leon Romanovsky <[email protected]> wrote:
net/core/devlink.c +3
-0+void *devlink_priv (struct devlink *devlink) +{ +BUG_ON (!devlink);
Do we really want to bring down the kernel in this case?
Can't we just have:
if (WARN_ON(!devlink)) return NULL;
?
Same for the below as well.
-- Steve
Quoted 17 lines
net/core/devlink.c +17
-0+return &devlink->priv; +} +EXPORT_SYMBOL_GPL (devlink_priv); + +struct devlink *priv_to_devlink (void *priv) +{ +BUG_ON (!priv); + return container_of(priv, struct devlink, priv); +} +EXPORT_SYMBOL_GPL (priv_to_devlink); + +struct device *devlink_to_dev (const struct devlink *devlink) +{ +return devlink->dev; +} +EXPORT_SYMBOL_GPL (devlink_to_dev); +
Re: [PATCH net-next v3 1/5] devlink: Reduce struct devlink exposure
Quoted 8 lines · Steven Rostedt
net/core/devlink.c line 74
Quoted 3 lines · On Thu, 7 Oct 2021 09:55:15 +0300 Leon Romanovsky <[email protected]> wrote:
net/core/devlink.c +3
-0+void *devlink_priv (struct devlink *devlink) +{ +BUG_ON (!devlink);Do we really want to bring down the kernel in this case?
It was before.
Quoted 6 lines
Can't we just have:
if (WARN_ON(!devlink)) return NULL;?
Callers of devlink_priv() are not prepared to have NULL here, they don't check return value at all,and this BUG_ON() can't happen at all.
Quoted 2 lines
Same for the below as well.
I can send followup patch.
Thanks
Quoted 20 lines
-- Steve
Quoted 17 lines
net/core/devlink.c +17
-0+return &devlink->priv; +} +EXPORT_SYMBOL_GPL (devlink_priv); + +struct devlink *priv_to_devlink (void *priv) +{ +BUG_ON (!priv); + return container_of(priv, struct devlink, priv); +} +EXPORT_SYMBOL_GPL (priv_to_devlink); + +struct device *devlink_to_dev (const struct devlink *devlink) +{ +return devlink->dev; +} +EXPORT_SYMBOL_GPL (devlink_to_dev); +
PATCH v3 2/5 devlink: Annotate devlink API calls
In reply to Leon RomanovskyFrom: Leon Romanovsky <[email protected]>
Initial annotation patch to separate calls that needs to be executed before or after devlink_register().
--- net/core/devlink.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
net/core/devlink.c +26 -0
@@ -154,6 +154,22 @@ static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ static DEFINE_XARRAY_FLAGS(devlinks, XA_FLAGS_ALLOC);#define DEVLINK_REGISTERED XA_MARK_1 +/* devlink instances are open to the access from the user space after +* devlink_register() call. Such logical barrier allows us to have certain +* expectations related to locking. +* +* Before *_register() - we are in initialization stage and no parallel +* access possible to the devlink instance. All drivers perform that phase +* by implicitly holding device_lock. +* +* After *_register() - users and driver can access devlink instance at +* the same time. +*/ +#define ASSERT_DEVLINK_REGISTERED (d) \ + WARN_ON_ONCE(!xa_get_mark(&devlinks, (d)->index, DEVLINK_REGISTERED)) +#define ASSERT_DEVLINK_NOT_REGISTERED (d) \ + WARN_ON_ONCE(xa_get_mark(&devlinks, (d)->index, DEVLINK_REGISTERED)) +/* devlink_mutex * * An overall lock guarding every operation coming from userspace.
@@ -9115,6 +9131,10 @@ static void devlink_notify_unregister(struct devlink *devlink)*/ void devlink_register (struct devlink *devlink) { +ASSERT_DEVLINK_NOT_REGISTERED (devlink); +/* Make sure that we are in .probe() routine */ +device_lock_assert (devlink->dev); +mutex_lock (&devlink_mutex);xa_set_mark (&devlinks, devlink->index,DEVLINK_REGISTERED );devlink_notify_register (devlink);
@@ -9129,6 +9149,10 @@ EXPORT_SYMBOL_GPL(devlink_register);*/ void devlink_unregister (struct devlink *devlink) { +ASSERT_DEVLINK_REGISTERED (devlink); +/* Make sure that we are in .remove() routine */ +device_lock_assert (devlink->dev); +devlink_put (devlink);wait_for_completion (&devlink->comp);
@@ -9183,6 +9207,8 @@ EXPORT_SYMBOL_GPL(devlink_reload_disable);*/ void devlink_free (struct devlink *devlink) { +ASSERT_DEVLINK_NOT_REGISTERED (devlink); +mutex_destroy (&devlink->reporters_lock);mutex_destroy (&devlink->lock);WARN_ON (!list_empty (&devlink->trap_policer_list));
Signature · 1 line
2.31.1
PATCH v3 3/5 devlink: Allow set reload ops callbacks separately
In reply to Leon RomanovskyFrom: Leon Romanovsky <[email protected]>
Introduce new devlink call to set reload ops callbacks during device initialization phase after devlink_alloc() is already called.
This allows us to set reload ops based on device property which is not known at the beginning of driver initialization.
For the sake of simplicity, this API lacks any type of locking and needs to be called before devlink_register() to make sure that no parallel access to the ops is possible at this stage.
--- .../hisilicon/hns3/hns3pf/hclge_devlink.c | 4 ++ .../hisilicon/hns3/hns3vf/hclgevf_devlink.c | 4 ++ drivers/net/ethernet/mellanox/mlx4/main.c | 8 +++- .../net/ethernet/mellanox/mlx5/core/devlink.c | 10 ++-- drivers/net/ethernet/mellanox/mlxsw/core.c | 12 +++-- drivers/net/netdevsim/dev.c | 10 ++-- include/net/devlink.h | 25 ++++++---- net/core/devlink.c | 48 ++++++++++++++----- 8 files changed, 87 insertions(+), 34 deletions(-)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c +4 -0
@@ -99,6 +99,9 @@ static int hclge_devlink_reload_up(struct devlink *devlink,static const struct devlink_ops hclge_devlink_ops = { .info_get = hclge_devlink_info_get, +}; + +static const struct devlink_reload_ops hclge_devlink_reload_ops = { .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ), .reload_down = hclge_devlink_reload_down, .reload_up = hclge_devlink_reload_up,
@@ -119,6 +122,7 @@ int hclge_devlink_init(struct hclge_dev *hdev) priv->hdev = hdev; hdev->devlink = devlink; +devlink_set_reload_ops (devlink, &hclge_devlink_reload_ops);devlink_register (devlink);devlink_reload_enable (devlink);return 0 ;
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c +4 -0
@@ -100,6 +100,9 @@ static int hclgevf_devlink_reload_up(struct devlink *devlink,static const struct devlink_ops hclgevf_devlink_ops = { .info_get = hclgevf_devlink_info_get, +}; + +static const struct devlink_reload_ops hclgevf_devlink_reload_ops = { .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ), .reload_down = hclgevf_devlink_reload_down, .reload_up = hclgevf_devlink_reload_up,
@@ -121,6 +124,7 @@ int hclgevf_devlink_init(struct hclgevf_dev *hdev) priv->hdev = hdev; hdev->devlink = devlink; +devlink_set_reload_ops (devlink, &hclgevf_devlink_reload_ops);devlink_register (devlink);devlink_reload_enable (devlink);return 0 ;
drivers/net/ethernet/mellanox/mlx4/main.c +6 -2
@@ -3982,9 +3982,12 @@ static int mlx4_devlink_reload_up(struct devlink *devlink, enum devlink_reload_astatic const struct devlink_ops mlx4_devlink_ops = { .port_type_set = mlx4_devlink_port_type_set, +}; + +static const struct devlink_reload_ops mlx4_devlink_reload_ops = { .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ), - .reload_down = mlx4_devlink_reload_down, - .reload_up = mlx4_devlink_reload_up, + .reload_down = mlx4_devlink_reload_down, + .reload_up = mlx4_devlink_reload_up, };static int mlx4_init_one (struct pci_dev *pdev,const struct pci_device_id *id)
@@ -4025,6 +4028,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) goto err_params_unregister;pci_save_state (pdev); +devlink_set_reload_ops (devlink, &mlx4_devlink_reload_ops);devlink_register (devlink);devlink_reload_enable (devlink);return 0 ;
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +7 -3
@@ -314,14 +314,17 @@ static const struct devlink_ops mlx5_devlink_ops = {#endif .flash_update = mlx5_devlink_flash_update, .info_get = mlx5_devlink_info_get, + .trap_init = mlx5_devlink_trap_init, + .trap_fini = mlx5_devlink_trap_fini, + .trap_action_set = mlx5_devlink_trap_action_set, +}; + +static const struct devlink_reload_ops mlx5_devlink_reload_ops = { .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ) |BIT (DEVLINK_RELOAD_ACTION_FW_ACTIVATE ), .reload_limits =BIT (DEVLINK_RELOAD_LIMIT_NO_RESET ), .reload_down = mlx5_devlink_reload_down, .reload_up = mlx5_devlink_reload_up, - .trap_init = mlx5_devlink_trap_init, - .trap_fini = mlx5_devlink_trap_fini, - .trap_action_set = mlx5_devlink_trap_action_set, }; void mlx5_devlink_trap_report(struct mlx5_core_dev *dev, int trap_id, struct sk_buff *skb,
@@ -813,6 +816,7 @@ int mlx5_devlink_register(struct devlink *devlink)if (err) goto traps_reg_err; +devlink_set_reload_ops (devlink, &mlx5_devlink_reload_ops);return 0 ; traps_reg_err:
drivers/net/ethernet/mellanox/mlxsw/core.c +8 -4
@@ -1615,10 +1615,6 @@ mlxsw_devlink_trap_policer_counter_get(struct devlink *devlink, }static const struct devlink_ops mlxsw_devlink_ops = { - .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ) | -BIT (DEVLINK_RELOAD_ACTION_FW_ACTIVATE ), - .reload_down = mlxsw_devlink_core_bus_device_reload_down, - .reload_up = mlxsw_devlink_core_bus_device_reload_up, .port_type_set = mlxsw_devlink_port_type_set, .port_split = mlxsw_devlink_port_split, .port_unsplit = mlxsw_devlink_port_unsplit,
@@ -1645,6 +1641,13 @@ static const struct devlink_ops mlxsw_devlink_ops = { .trap_policer_counter_get = mlxsw_devlink_trap_policer_counter_get, }; +static const struct devlink_reload_ops mlxsw_devlink_reload_ops = { + .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ) | +BIT (DEVLINK_RELOAD_ACTION_FW_ACTIVATE ), + .reload_down = mlxsw_devlink_core_bus_device_reload_down, + .reload_up = mlxsw_devlink_core_bus_device_reload_up, +}; +static int mlxsw_core_params_register (struct mlxsw_core *mlxsw_core) {int err;
@@ -2008,6 +2011,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, }if (!reload) { +devlink_set_reload_ops (devlink, &mlxsw_devlink_reload_ops);devlink_register (devlink);devlink_reload_enable (devlink); }
drivers/net/netdevsim/dev.c +7 -3
@@ -1246,9 +1246,6 @@ static const struct devlink_ops nsim_dev_devlink_ops = { .eswitch_mode_get = nsim_devlink_eswitch_mode_get, .supported_flash_update_params =DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT | DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK, - .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT), - .reload_down = nsim_dev_reload_down, - .reload_up = nsim_dev_reload_up, .info_get = nsim_dev_info_get, .flash_update = nsim_dev_flash_update, .trap_init = nsim_dev_devlink_trap_init,
@@ -1267,6 +1264,12 @@ static const struct devlink_ops nsim_dev_devlink_ops = { .trap_drop_counter_get = nsim_dev_devlink_trap_drop_counter_get, }; +static const struct devlink_reload_ops nsim_dev_devlink_reload_ops = { + .reload_actions =BIT (DEVLINK_RELOAD_ACTION_DRIVER_REINIT ), + .reload_down = nsim_dev_reload_down, + .reload_up = nsim_dev_reload_up, +}; +#define NSIM_DEV_MAX_MACS_DEFAULT 32#define NSIM_DEV_TEST1_DEFAULT true
@@ -1511,6 +1514,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev) goto err_psample_exit; nsim_dev->esw_mode =DEVLINK_ESWITCH_MODE_LEGACY ; +devlink_set_reload_ops (devlink, &nsim_dev_devlink_reload_ops);devlink_register (devlink);devlink_reload_enable (devlink);return 0 ;
include/net/devlink.h +16 -9
@@ -1193,15 +1193,6 @@ struct devlink_ops {* implemementation. */ u32 supported_flash_update_params; -unsigned long reload_actions; -unsigned long reload_limits; -int (*reload_down)(struct devlink *devlink,bool netns_change, -enum devlink_reload_action action, -enum devlink_reload_limit limit, -struct netlink_ext_ack *extack); -int (*reload_up)(struct devlink *devlink,enum devlink_reload_action action, -enum devlink_reload_limit limit,u32 *actions_performed, -struct netlink_ext_ack *extack);int (*port_type_set)(struct devlink_port *devlink_port,enum devlink_port_type port_type); int (*port_split)(struct devlink *devlink, unsigned int port_index,
@@ -1482,6 +1473,20 @@ struct devlink_ops { struct netlink_ext_ack *extack); }; +struct devlink_reload_ops { +unsigned long reload_actions; +unsigned long reload_limits; +int (*reload_down)(struct devlink *devlink,bool netns_change, +enum devlink_reload_action action, +enum devlink_reload_limit limit, +struct netlink_ext_ack *extack); +int (*reload_up)(struct devlink *devlink, +enum devlink_reload_action action, +enum devlink_reload_limit limit, +u32 *actions_performed, +struct netlink_ext_ack *extack); +}; +void *devlink_priv (struct devlink *devlink);struct devlink *priv_to_devlink (void *priv);struct device *devlink_to_dev (const struct devlink *devlink);
@@ -1520,6 +1525,8 @@ static inline struct devlink *devlink_alloc(const struct devlink_ops *ops, {return devlink_alloc_ns (ops, priv_size, &init_net, dev); } +void devlink_set_reload_ops (struct devlink *devlink, +const struct devlink_reload_ops *ops);void devlink_register (struct devlink *devlink);void devlink_unregister (struct devlink *devlink);void devlink_reload_enable (struct devlink *devlink);
net/core/devlink.c +35 -13
126 lines not on this page · raw message
Signature · 1 line
2.31.1
PATCH v3 4/5 net/mlx5: Separate reload devlink ops for multiport device
In reply to Leon RomanovskyFrom: Leon Romanovsky <[email protected]>
Mulitport slave device doesn't support devlink reload, so instead of complicating initialization flow with devlink_reload_enable() which will be removed in next patch, set specialized devlink ops callbacks for reload operations.
This fixes an error when reload counters exposed (and equal zero) for the mode that is not supported at all.
--- drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +4 -1
@@ -799,6 +799,7 @@ static void mlx5_devlink_traps_unregister(struct devlink *devlink)int mlx5_devlink_register (struct devlink *devlink) { +struct mlx5_core_dev *dev =devlink_priv (devlink);int err; err = devlink_params_register(devlink, mlx5_devlink_params,
@@ -816,7 +817,9 @@ int mlx5_devlink_register(struct devlink *devlink)if (err) goto traps_reg_err; -devlink_set_reload_ops (devlink, &mlx5_devlink_reload_ops); +if (!mlx5_core_is_mp_slave (dev)) +devlink_set_reload_ops (devlink, &mlx5_devlink_reload_ops); +return 0 ; traps_reg_err:
Signature · 1 line
2.31.1
PATCH v3 5/5 devlink: Delete reload enable/disable interface
In reply to Leon RomanovskyFrom: Leon Romanovsky <[email protected]>
Commit a0c76345e3d3 ("devlink: disallow reload operation during device cleanup") added devlink_reload_{enable,disable}() APIs to prevent reload operation from racing with device probe/dismantle.
After recent changes to move devlink_register() to the end of device probe and devlink_unregister() to the beginning of device dismantle, these races can no longer happen. Reload operations will be denied if the devlink instance is unregistered and devlink_unregister() will block until all in-flight operations are done.
Therefore, remove these devlink_reload_{enable,disable}() APIs.
--- .../hisilicon/hns3/hns3pf/hclge_devlink.c | 3 -- .../hisilicon/hns3/hns3vf/hclgevf_devlink.c | 3 -- drivers/net/ethernet/mellanox/mlx4/main.c | 2 - .../net/ethernet/mellanox/mlx5/core/main.c | 3 -- .../mellanox/mlx5/core/sf/dev/driver.c | 5 +-- drivers/net/ethernet/mellanox/mlxsw/core.c | 7 +-- drivers/net/netdevsim/dev.c | 3 -- include/net/devlink.h | 2 - net/core/devlink.c | 43 +------------------ 9 files changed, 4 insertions(+), 67 deletions(-)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c +0 -3
@@ -124,7 +124,6 @@ int hclge_devlink_init(struct hclge_dev *hdev)devlink_set_reload_ops (devlink, &hclge_devlink_reload_ops);devlink_register (devlink); -devlink_reload_enable (devlink);return 0 ; }
@@ -132,8 +131,6 @@ void hclge_devlink_uninit(struct hclge_dev *hdev) {struct devlink *devlink = hdev->devlink; -devlink_reload_disable (devlink); -devlink_unregister (devlink);devlink_free (devlink);
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c +0 -3
@@ -126,7 +126,6 @@ int hclgevf_devlink_init(struct hclgevf_dev *hdev)devlink_set_reload_ops (devlink, &hclgevf_devlink_reload_ops);devlink_register (devlink); -devlink_reload_enable (devlink);return 0 ; }
@@ -134,8 +133,6 @@ void hclgevf_devlink_uninit(struct hclgevf_dev *hdev) {struct devlink *devlink = hdev->devlink; -devlink_reload_disable (devlink); -devlink_unregister (devlink);devlink_free (devlink);
drivers/net/ethernet/mellanox/mlx4/main.c +0 -2
@@ -4030,7 +4030,6 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)pci_save_state (pdev);devlink_set_reload_ops (devlink, &mlx4_devlink_reload_ops);devlink_register (devlink); -devlink_reload_enable (devlink);return 0 ; err_params_unregister:
@@ -4139,7 +4138,6 @@ static void mlx4_remove_one(struct pci_dev *pdev)struct devlink *devlink =priv_to_devlink (priv);int active_vfs =0 ; -devlink_reload_disable (devlink);devlink_unregister (devlink);if (mlx4_is_slave (dev))
drivers/net/ethernet/mellanox/mlx5/core/main.c +0 -3
@@ -1538,8 +1538,6 @@ static int probe_one(struct pci_dev *pdev, const struct pci_device_id *id)pci_save_state (pdev);devlink_register (devlink); -if (!mlx5_core_is_mp_slave (dev)) -devlink_reload_enable (devlink);return 0 ; err_init_one:
@@ -1559,7 +1557,6 @@ static void remove_one(struct pci_dev *pdev)struct mlx5_core_dev *dev =pci_get_drvdata (pdev);struct devlink *devlink =priv_to_devlink (dev); -devlink_reload_disable (devlink);devlink_unregister (devlink);mlx5_crdump_disable (dev);mlx5_drain_health_wq (dev);
drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c +1 -4
@@ -47,7 +47,6 @@ static int mlx5_sf_dev_probe(struct auxiliary_device *adev, const struct auxilia goto init_one_err; }devlink_register (devlink); -devlink_reload_enable (devlink);return 0 ; init_one_err:
@@ -62,10 +61,8 @@ static int mlx5_sf_dev_probe(struct auxiliary_device *adev, const struct auxiliastatic void mlx5_sf_dev_remove (struct auxiliary_device *adev) { struct mlx5_sf_dev *sf_dev = container_of(adev, struct mlx5_sf_dev, adev); -struct devlink *devlink; +struct devlink *devlink =priv_to_devlink (sf_dev->mdev); - devlink =priv_to_devlink (sf_dev->mdev); -devlink_reload_disable (devlink);devlink_unregister (devlink);mlx5_uninit_one (sf_dev->mdev);iounmap (sf_dev->mdev->iseg);
drivers/net/ethernet/mellanox/mlxsw/core.c +2 -5
@@ -2013,9 +2013,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,if (!reload) {devlink_set_reload_ops (devlink, &mlxsw_devlink_reload_ops);devlink_register (devlink); -devlink_reload_enable (devlink); } -return 0 ; err_driver_init:
@@ -2079,10 +2077,9 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, {struct devlink *devlink =priv_to_devlink (mlxsw_core); -if (!reload) { -devlink_reload_disable (devlink); +if (!reload)devlink_unregister (devlink); - } +if (devlink_is_reload_failed (devlink)) {if (!reload)/* Only the parts that were not de-initialized in the
drivers/net/netdevsim/dev.c +0 -3
@@ -1516,7 +1516,6 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev) nsim_dev->esw_mode =DEVLINK_ESWITCH_MODE_LEGACY ;devlink_set_reload_ops (devlink, &nsim_dev_devlink_reload_ops);devlink_register (devlink); -devlink_reload_enable (devlink);return 0 ; err_psample_exit:
@@ -1570,9 +1569,7 @@ void nsim_dev_remove(struct nsim_bus_dev *nsim_bus_dev)struct nsim_dev *nsim_dev =dev_get_drvdata (&nsim_bus_dev->dev);struct devlink *devlink =priv_to_devlink (nsim_dev); -devlink_reload_disable (devlink);devlink_unregister (devlink); -nsim_dev_reload_destroy (nsim_dev);nsim_bpf_dev_exit (nsim_dev);
include/net/devlink.h +0 -2
@@ -1529,8 +1529,6 @@ void devlink_set_reload_ops(struct devlink *devlink, const struct devlink_reload_ops *ops);void devlink_register (struct devlink *devlink);void devlink_unregister (struct devlink *devlink); -void devlink_reload_enable (struct devlink *devlink); -void devlink_reload_disable (struct devlink *devlink);void devlink_free (struct devlink *devlink); int devlink_port_register(struct devlink *devlink, struct devlink_port *devlink_port,
net/core/devlink.c +1 -42
67 lines not on this page · raw message
Signature · 1 line
2.31.1
Leon Romanovsky
maintainerQuoted 1 line · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
<...>
Quoted 6 lines
Leon Romanovsky (5):
devlink: Reduce struct devlink exposure
devlink: Annotate devlink API calls
devlink: Allow set reload ops callbacks separately net/mlx5: Separate reload devlink ops for multiport device
devlink: Delete reload enable/disable interface
Hi,
I see in patchworks that state of this series was marked as "Rejected".
https://patchwork.kernel.org/project/netdevbpf/list/?series=558901&state=*
Can I ask why? How can we proceed with the series?
Thanks
Quoted 18 lines
.../hisilicon/hns3/hns3pf/hclge_devlink.c | 7 +- .../hisilicon/hns3/hns3vf/hclgevf_devlink.c | 7 +- drivers/net/ethernet/mellanox/mlx4/main.c | 10 +- .../net/ethernet/mellanox/mlx5/core/devlink.c | 13 +- .../net/ethernet/mellanox/mlx5/core/main.c | 3 - .../mellanox/mlx5/core/sf/dev/driver.c | 5 +- drivers/net/ethernet/mellanox/mlxfw/mlxfw.h | 2 +- drivers/net/ethernet/mellanox/mlxsw/core.c | 19 +- drivers/net/netdevsim/dev.c | 13 +- include/net/devlink.h | 79 ++------ include/trace/events/devlink.h | 72 ++++---- net/core/devlink.c | 170 ++++++++++++------ 12 files changed, 216 insertions(+), 184 deletions(-)Signature · 1 line
2.31.1