Commit 2bb21b8d authored by Edwin Peer's avatar Edwin Peer Committed by David S. Miller

bnxt_en: consolidate fw devlink health reporters

Merge 'fw' and 'fw_fatal' health reporters.  There is no longer a need
to distinguish between firmware reporters. Only bonafide errors are
reported now and no reports were being generated for the 'fw' reporter.
Signed-off-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent aadb0b1a
...@@ -1551,7 +1551,6 @@ struct bnxt_fw_health { ...@@ -1551,7 +1551,6 @@ struct bnxt_fw_health {
u32 echo_req_data1; u32 echo_req_data1;
u32 echo_req_data2; u32 echo_req_data2;
struct devlink_health_reporter *fw_reporter; struct devlink_health_reporter *fw_reporter;
struct devlink_health_reporter *fw_fatal_reporter;
}; };
#define BNXT_FW_HEALTH_REG_TYPE_MASK 3 #define BNXT_FW_HEALTH_REG_TYPE_MASK 3
......
...@@ -71,9 +71,9 @@ static int bnxt_hwrm_remote_dev_reset_set(struct bnxt *bp, bool remote_reset) ...@@ -71,9 +71,9 @@ static int bnxt_hwrm_remote_dev_reset_set(struct bnxt *bp, bool remote_reset)
return hwrm_req_send(bp, req); return hwrm_req_send(bp, req);
} }
static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter, static int bnxt_fw_diagnose(struct devlink_health_reporter *reporter,
struct devlink_fmsg *fmsg, struct devlink_fmsg *fmsg,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
struct bnxt *bp = devlink_health_reporter_priv(reporter); struct bnxt *bp = devlink_health_reporter_priv(reporter);
u32 val; u32 val;
...@@ -110,14 +110,9 @@ static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter, ...@@ -110,14 +110,9 @@ static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
return 0; return 0;
} }
static const struct devlink_health_reporter_ops bnxt_dl_fw_reporter_ops = { static int bnxt_fw_recover(struct devlink_health_reporter *reporter,
.name = "fw", void *priv_ctx,
.diagnose = bnxt_fw_reporter_diagnose, struct netlink_ext_ack *extack)
};
static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter,
void *priv_ctx,
struct netlink_ext_ack *extack)
{ {
struct bnxt *bp = devlink_health_reporter_priv(reporter); struct bnxt *bp = devlink_health_reporter_priv(reporter);
...@@ -127,43 +122,26 @@ static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter, ...@@ -127,43 +122,26 @@ static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter,
return -EINPROGRESS; return -EINPROGRESS;
} }
static const static const struct devlink_health_reporter_ops bnxt_dl_fw_reporter_ops = {
struct devlink_health_reporter_ops bnxt_dl_fw_fatal_reporter_ops = { .name = "fw",
.name = "fw_fatal", .diagnose = bnxt_fw_diagnose,
.recover = bnxt_fw_fatal_recover, .recover = bnxt_fw_recover,
}; };
void bnxt_dl_fw_reporters_create(struct bnxt *bp) void bnxt_dl_fw_reporters_create(struct bnxt *bp)
{ {
struct bnxt_fw_health *health = bp->fw_health; struct bnxt_fw_health *health = bp->fw_health;
if (!health) if (!health || health->fw_reporter)
return; return;
if (!health->fw_reporter) { health->fw_reporter =
health->fw_reporter = devlink_health_reporter_create(bp->dl, &bnxt_dl_fw_reporter_ops,
devlink_health_reporter_create(bp->dl,
&bnxt_dl_fw_reporter_ops,
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));
health->fw_reporter = NULL;
return;
}
}
if (health->fw_fatal_reporter)
return;
health->fw_fatal_reporter =
devlink_health_reporter_create(bp->dl,
&bnxt_dl_fw_fatal_reporter_ops,
0, bp); 0, bp);
if (IS_ERR(health->fw_fatal_reporter)) { if (IS_ERR(health->fw_reporter)) {
netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n", netdev_warn(bp->dev, "Failed to create FW health reporter, rc = %ld\n",
PTR_ERR(health->fw_fatal_reporter)); PTR_ERR(health->fw_reporter));
health->fw_fatal_reporter = NULL; health->fw_reporter = NULL;
bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY; bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY;
} }
} }
...@@ -182,11 +160,6 @@ void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all) ...@@ -182,11 +160,6 @@ void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all)
devlink_health_reporter_destroy(health->fw_reporter); devlink_health_reporter_destroy(health->fw_reporter);
health->fw_reporter = NULL; health->fw_reporter = NULL;
} }
if (health->fw_fatal_reporter) {
devlink_health_reporter_destroy(health->fw_fatal_reporter);
health->fw_fatal_reporter = NULL;
}
} }
void bnxt_devlink_health_fw_report(struct bnxt *bp) void bnxt_devlink_health_fw_report(struct bnxt *bp)
...@@ -196,13 +169,12 @@ void bnxt_devlink_health_fw_report(struct bnxt *bp) ...@@ -196,13 +169,12 @@ void bnxt_devlink_health_fw_report(struct bnxt *bp)
if (!fw_health) if (!fw_health)
return; return;
if (!fw_health->fw_fatal_reporter) { if (!fw_health->fw_reporter) {
__bnxt_fw_recover(bp); __bnxt_fw_recover(bp);
return; return;
} }
devlink_health_report(fw_health->fw_fatal_reporter, devlink_health_report(fw_health->fw_reporter, "FW error reported", NULL);
"FW fatal error reported", NULL);
} }
void bnxt_dl_health_fw_status_update(struct bnxt *bp, bool healthy) void bnxt_dl_health_fw_status_update(struct bnxt *bp, bool healthy)
...@@ -215,15 +187,14 @@ void bnxt_dl_health_fw_status_update(struct bnxt *bp, bool healthy) ...@@ -215,15 +187,14 @@ void bnxt_dl_health_fw_status_update(struct bnxt *bp, bool healthy)
else else
state = DEVLINK_HEALTH_REPORTER_STATE_ERROR; state = DEVLINK_HEALTH_REPORTER_STATE_ERROR;
devlink_health_reporter_state_update(health->fw_fatal_reporter, state); devlink_health_reporter_state_update(health->fw_reporter, state);
} }
void bnxt_dl_health_fw_recovery_done(struct bnxt *bp) void bnxt_dl_health_fw_recovery_done(struct bnxt *bp)
{ {
struct bnxt_fw_health *hlth = bp->fw_health;
struct bnxt_dl *dl = devlink_priv(bp->dl); struct bnxt_dl *dl = devlink_priv(bp->dl);
devlink_health_reporter_recovery_done(hlth->fw_fatal_reporter); devlink_health_reporter_recovery_done(bp->fw_health->fw_reporter);
bnxt_hwrm_remote_dev_reset_set(bp, dl->remote_reset); bnxt_hwrm_remote_dev_reset_set(bp, dl->remote_reset);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment