forked from Minki/linux
devlink: Implicitly set auto recover flag when registering health reporter
When health reporter is registered to devlink, devlink will implicitly set auto recover if and only if the reporter has a recover method. No reason to explicitly get the auto recover flag from the driver. Remove this flag from all drivers that called devlink_health_reporter_create. All existing health reporters set auto recovery to true if they have a recover method. Yet, administrator can unset auto recover via netlink command as prior to this patch. Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c7f0d4c898
commit
ba7d16c779
@ -150,7 +150,7 @@ void bnxt_dl_fw_reporters_create(struct bnxt *bp)
|
||||
health->fw_reset_reporter =
|
||||
devlink_health_reporter_create(bp->dl,
|
||||
&bnxt_dl_fw_reset_reporter_ops,
|
||||
0, true, bp);
|
||||
0, bp);
|
||||
if (IS_ERR(health->fw_reset_reporter)) {
|
||||
netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n",
|
||||
PTR_ERR(health->fw_reset_reporter));
|
||||
@ -166,7 +166,7 @@ err_recovery:
|
||||
health->fw_reporter =
|
||||
devlink_health_reporter_create(bp->dl,
|
||||
&bnxt_dl_fw_reporter_ops,
|
||||
0, false, bp);
|
||||
0, bp);
|
||||
if (IS_ERR(health->fw_reporter)) {
|
||||
netdev_warn(bp->dev, "Failed to create FW health reporter, rc = %ld\n",
|
||||
PTR_ERR(health->fw_reporter));
|
||||
@ -182,7 +182,7 @@ err_recovery:
|
||||
health->fw_fatal_reporter =
|
||||
devlink_health_reporter_create(bp->dl,
|
||||
&bnxt_dl_fw_fatal_reporter_ops,
|
||||
0, true, bp);
|
||||
0, bp);
|
||||
if (IS_ERR(health->fw_fatal_reporter)) {
|
||||
netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n",
|
||||
PTR_ERR(health->fw_fatal_reporter));
|
||||
|
@ -571,7 +571,7 @@ int mlx5e_reporter_rx_create(struct mlx5e_priv *priv)
|
||||
reporter = devlink_health_reporter_create(devlink,
|
||||
&mlx5_rx_reporter_ops,
|
||||
MLX5E_REPORTER_RX_GRACEFUL_PERIOD,
|
||||
true, priv);
|
||||
priv);
|
||||
if (IS_ERR(reporter)) {
|
||||
netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n",
|
||||
PTR_ERR(reporter));
|
||||
|
@ -416,7 +416,7 @@ int mlx5e_reporter_tx_create(struct mlx5e_priv *priv)
|
||||
reporter =
|
||||
devlink_health_reporter_create(devlink, &mlx5_tx_reporter_ops,
|
||||
MLX5_REPORTER_TX_GRACEFUL_PERIOD,
|
||||
true, priv);
|
||||
priv);
|
||||
if (IS_ERR(reporter)) {
|
||||
netdev_warn(priv->netdev,
|
||||
"Failed to create tx reporter, err = %ld\n",
|
||||
|
@ -627,7 +627,7 @@ static void mlx5_fw_reporters_create(struct mlx5_core_dev *dev)
|
||||
|
||||
health->fw_reporter =
|
||||
devlink_health_reporter_create(devlink, &mlx5_fw_reporter_ops,
|
||||
0, false, dev);
|
||||
0, dev);
|
||||
if (IS_ERR(health->fw_reporter))
|
||||
mlx5_core_warn(dev, "Failed to create fw reporter, err = %ld\n",
|
||||
PTR_ERR(health->fw_reporter));
|
||||
@ -636,7 +636,7 @@ static void mlx5_fw_reporters_create(struct mlx5_core_dev *dev)
|
||||
devlink_health_reporter_create(devlink,
|
||||
&mlx5_fw_fatal_reporter_ops,
|
||||
MLX5_REPORTER_FW_GRACEFUL_PERIOD,
|
||||
true, dev);
|
||||
dev);
|
||||
if (IS_ERR(health->fw_fatal_reporter))
|
||||
mlx5_core_warn(dev, "Failed to create fw fatal reporter, err = %ld\n",
|
||||
PTR_ERR(health->fw_fatal_reporter));
|
||||
|
@ -271,14 +271,14 @@ int nsim_dev_health_init(struct nsim_dev *nsim_dev, struct devlink *devlink)
|
||||
health->empty_reporter =
|
||||
devlink_health_reporter_create(devlink,
|
||||
&nsim_dev_empty_reporter_ops,
|
||||
0, false, health);
|
||||
0, health);
|
||||
if (IS_ERR(health->empty_reporter))
|
||||
return PTR_ERR(health->empty_reporter);
|
||||
|
||||
health->dummy_reporter =
|
||||
devlink_health_reporter_create(devlink,
|
||||
&nsim_dev_dummy_reporter_ops,
|
||||
0, true, health);
|
||||
0, health);
|
||||
if (IS_ERR(health->dummy_reporter)) {
|
||||
err = PTR_ERR(health->dummy_reporter);
|
||||
goto err_empty_reporter_destroy;
|
||||
|
@ -1040,8 +1040,7 @@ int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
struct devlink_health_reporter *
|
||||
devlink_health_reporter_create(struct devlink *devlink,
|
||||
const struct devlink_health_reporter_ops *ops,
|
||||
u64 graceful_period, bool auto_recover,
|
||||
void *priv);
|
||||
u64 graceful_period, void *priv);
|
||||
void
|
||||
devlink_health_reporter_destroy(struct devlink_health_reporter *reporter);
|
||||
|
||||
|
@ -5124,14 +5124,12 @@ devlink_health_reporter_find_by_name(struct devlink *devlink,
|
||||
* @devlink: devlink
|
||||
* @ops: ops
|
||||
* @graceful_period: to avoid recovery loops, in msecs
|
||||
* @auto_recover: auto recover when error occurs
|
||||
* @priv: priv
|
||||
*/
|
||||
struct devlink_health_reporter *
|
||||
devlink_health_reporter_create(struct devlink *devlink,
|
||||
const struct devlink_health_reporter_ops *ops,
|
||||
u64 graceful_period, bool auto_recover,
|
||||
void *priv)
|
||||
u64 graceful_period, void *priv)
|
||||
{
|
||||
struct devlink_health_reporter *reporter;
|
||||
|
||||
@ -5141,8 +5139,7 @@ devlink_health_reporter_create(struct devlink *devlink,
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
if (WARN_ON(auto_recover && !ops->recover) ||
|
||||
WARN_ON(graceful_period && !ops->recover)) {
|
||||
if (WARN_ON(graceful_period && !ops->recover)) {
|
||||
reporter = ERR_PTR(-EINVAL);
|
||||
goto unlock;
|
||||
}
|
||||
@ -5157,7 +5154,7 @@ devlink_health_reporter_create(struct devlink *devlink,
|
||||
reporter->ops = ops;
|
||||
reporter->devlink = devlink;
|
||||
reporter->graceful_period = graceful_period;
|
||||
reporter->auto_recover = auto_recover;
|
||||
reporter->auto_recover = !!ops->recover;
|
||||
mutex_init(&reporter->dump_lock);
|
||||
refcount_set(&reporter->refcount, 1);
|
||||
list_add_tail(&reporter->list, &devlink->reporter_list);
|
||||
|
Loading…
Reference in New Issue
Block a user