Skip to content

Commit e7a9810

Browse files
jpirkodavem330
authored andcommitted
devlink: propagate extack down to health reporter ops
During health reporter operations, driver might want to fill-up the extack message, so propagate extack down to the health reporter ops. Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4028182 commit e7a9810

File tree

6 files changed

+38
-23
lines changed

6 files changed

+38
-23
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
#include "bnxt_devlink.h"
1717

1818
static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
19-
struct devlink_fmsg *fmsg)
19+
struct devlink_fmsg *fmsg,
20+
struct netlink_ext_ack *extack)
2021
{
2122
struct bnxt *bp = devlink_health_reporter_priv(reporter);
2223
struct bnxt_fw_health *health = bp->fw_health;
@@ -66,7 +67,8 @@ static const struct devlink_health_reporter_ops bnxt_dl_fw_reporter_ops = {
6667
};
6768

6869
static int bnxt_fw_reset_recover(struct devlink_health_reporter *reporter,
69-
void *priv_ctx)
70+
void *priv_ctx,
71+
struct netlink_ext_ack *extack)
7072
{
7173
struct bnxt *bp = devlink_health_reporter_priv(reporter);
7274

@@ -84,7 +86,8 @@ struct devlink_health_reporter_ops bnxt_dl_fw_reset_reporter_ops = {
8486
};
8587

8688
static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter,
87-
void *priv_ctx)
89+
void *priv_ctx,
90+
struct netlink_ext_ack *extack)
8891
{
8992
struct bnxt *bp = devlink_health_reporter_priv(reporter);
9093
struct bnxt_fw_reporter_ctx *fw_reporter_ctx = priv_ctx;

drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,8 @@ static int mlx5e_rx_reporter_recover_from_ctx(struct mlx5e_err_ctx *err_ctx)
222222
}
223223

224224
static int mlx5e_rx_reporter_recover(struct devlink_health_reporter *reporter,
225-
void *context)
225+
void *context,
226+
struct netlink_ext_ack *extack)
226227
{
227228
struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
228229
struct mlx5e_err_ctx *err_ctx = context;
@@ -301,7 +302,8 @@ static int mlx5e_rx_reporter_build_diagnose_output(struct mlx5e_rq *rq,
301302
}
302303

303304
static int mlx5e_rx_reporter_diagnose(struct devlink_health_reporter *reporter,
304-
struct devlink_fmsg *fmsg)
305+
struct devlink_fmsg *fmsg,
306+
struct netlink_ext_ack *extack)
305307
{
306308
struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
307309
struct mlx5e_params *params = &priv->channels.params;

drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ static int mlx5e_tx_reporter_recover_from_ctx(struct mlx5e_err_ctx *err_ctx)
135135
}
136136

137137
static int mlx5e_tx_reporter_recover(struct devlink_health_reporter *reporter,
138-
void *context)
138+
void *context,
139+
struct netlink_ext_ack *extack)
139140
{
140141
struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
141142
struct mlx5e_err_ctx *err_ctx = context;
@@ -205,7 +206,8 @@ mlx5e_tx_reporter_build_diagnose_output(struct devlink_fmsg *fmsg,
205206
}
206207

207208
static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
208-
struct devlink_fmsg *fmsg)
209+
struct devlink_fmsg *fmsg,
210+
struct netlink_ext_ack *extack)
209211
{
210212
struct mlx5e_priv *priv = devlink_health_reporter_priv(reporter);
211213
struct mlx5e_txqsq *generic_sq = priv->txq2sq[0];

drivers/net/ethernet/mellanox/mlx5/core/health.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,8 @@ static void print_health_info(struct mlx5_core_dev *dev)
390390

391391
static int
392392
mlx5_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
393-
struct devlink_fmsg *fmsg)
393+
struct devlink_fmsg *fmsg,
394+
struct netlink_ext_ack *extack)
394395
{
395396
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
396397
struct mlx5_core_health *health = &dev->priv.health;
@@ -491,7 +492,8 @@ mlx5_fw_reporter_heath_buffer_data_put(struct mlx5_core_dev *dev,
491492

492493
static int
493494
mlx5_fw_reporter_dump(struct devlink_health_reporter *reporter,
494-
struct devlink_fmsg *fmsg, void *priv_ctx)
495+
struct devlink_fmsg *fmsg, void *priv_ctx,
496+
struct netlink_ext_ack *extack)
495497
{
496498
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
497499
int err;
@@ -545,7 +547,8 @@ static const struct devlink_health_reporter_ops mlx5_fw_reporter_ops = {
545547

546548
static int
547549
mlx5_fw_fatal_reporter_recover(struct devlink_health_reporter *reporter,
548-
void *priv_ctx)
550+
void *priv_ctx,
551+
struct netlink_ext_ack *extack)
549552
{
550553
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
551554

@@ -555,7 +558,8 @@ mlx5_fw_fatal_reporter_recover(struct devlink_health_reporter *reporter,
555558
#define MLX5_CR_DUMP_CHUNK_SIZE 256
556559
static int
557560
mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
558-
struct devlink_fmsg *fmsg, void *priv_ctx)
561+
struct devlink_fmsg *fmsg, void *priv_ctx,
562+
struct netlink_ext_ack *extack)
559563
{
560564
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
561565
u32 crdump_size = dev->priv.health.crdump_size;

include/net/devlink.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,11 +507,13 @@ enum devlink_health_reporter_state {
507507
struct devlink_health_reporter_ops {
508508
char *name;
509509
int (*recover)(struct devlink_health_reporter *reporter,
510-
void *priv_ctx);
510+
void *priv_ctx, struct netlink_ext_ack *extack);
511511
int (*dump)(struct devlink_health_reporter *reporter,
512-
struct devlink_fmsg *fmsg, void *priv_ctx);
512+
struct devlink_fmsg *fmsg, void *priv_ctx,
513+
struct netlink_ext_ack *extack);
513514
int (*diagnose)(struct devlink_health_reporter *reporter,
514-
struct devlink_fmsg *fmsg);
515+
struct devlink_fmsg *fmsg,
516+
struct netlink_ext_ack *extack);
515517
};
516518

517519
/**

net/core/devlink.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4847,7 +4847,7 @@ EXPORT_SYMBOL_GPL(devlink_health_reporter_state_update);
48474847

48484848
static int
48494849
devlink_health_reporter_recover(struct devlink_health_reporter *reporter,
4850-
void *priv_ctx)
4850+
void *priv_ctx, struct netlink_ext_ack *extack)
48514851
{
48524852
int err;
48534853

@@ -4857,7 +4857,7 @@ devlink_health_reporter_recover(struct devlink_health_reporter *reporter,
48574857
if (!reporter->ops->recover)
48584858
return -EOPNOTSUPP;
48594859

4860-
err = reporter->ops->recover(reporter, priv_ctx);
4860+
err = reporter->ops->recover(reporter, priv_ctx, extack);
48614861
if (err)
48624862
return err;
48634863

@@ -4878,7 +4878,8 @@ devlink_health_dump_clear(struct devlink_health_reporter *reporter)
48784878
}
48794879

48804880
static int devlink_health_do_dump(struct devlink_health_reporter *reporter,
4881-
void *priv_ctx)
4881+
void *priv_ctx,
4882+
struct netlink_ext_ack *extack)
48824883
{
48834884
int err;
48844885

@@ -4899,7 +4900,7 @@ static int devlink_health_do_dump(struct devlink_health_reporter *reporter,
48994900
goto dump_err;
49004901

49014902
err = reporter->ops->dump(reporter, reporter->dump_fmsg,
4902-
priv_ctx);
4903+
priv_ctx, extack);
49034904
if (err)
49044905
goto dump_err;
49054906

@@ -4946,11 +4947,12 @@ int devlink_health_report(struct devlink_health_reporter *reporter,
49464947

49474948
mutex_lock(&reporter->dump_lock);
49484949
/* store current dump of current error, for later analysis */
4949-
devlink_health_do_dump(reporter, priv_ctx);
4950+
devlink_health_do_dump(reporter, priv_ctx, NULL);
49504951
mutex_unlock(&reporter->dump_lock);
49514952

49524953
if (reporter->auto_recover)
4953-
return devlink_health_reporter_recover(reporter, priv_ctx);
4954+
return devlink_health_reporter_recover(reporter,
4955+
priv_ctx, NULL);
49544956

49554957
return 0;
49564958
}
@@ -5188,7 +5190,7 @@ static int devlink_nl_cmd_health_reporter_recover_doit(struct sk_buff *skb,
51885190
if (!reporter)
51895191
return -EINVAL;
51905192

5191-
err = devlink_health_reporter_recover(reporter, NULL);
5193+
err = devlink_health_reporter_recover(reporter, NULL, info->extack);
51925194

51935195
devlink_health_reporter_put(reporter);
51945196
return err;
@@ -5221,7 +5223,7 @@ static int devlink_nl_cmd_health_reporter_diagnose_doit(struct sk_buff *skb,
52215223
if (err)
52225224
goto out;
52235225

5224-
err = reporter->ops->diagnose(reporter, fmsg);
5226+
err = reporter->ops->diagnose(reporter, fmsg, info->extack);
52255227
if (err)
52265228
goto out;
52275229

@@ -5256,7 +5258,7 @@ devlink_nl_cmd_health_reporter_dump_get_dumpit(struct sk_buff *skb,
52565258
}
52575259
mutex_lock(&reporter->dump_lock);
52585260
if (!start) {
5259-
err = devlink_health_do_dump(reporter, NULL);
5261+
err = devlink_health_do_dump(reporter, NULL, cb->extack);
52605262
if (err)
52615263
goto unlock;
52625264
cb->args[1] = reporter->dump_ts;

0 commit comments

Comments
 (0)