bnxt_en: Call recovery done after reset is successfully done
Return EINPROGRESS to devlink health reporter recover as we are not yet done and call devlink_health_reporter_recovery_done once reset is successfully completed from workqueue context. Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
97ff3bd37f
commit
737d7a6c55
|
@ -10822,6 +10822,7 @@ static void bnxt_fw_reset_task(struct work_struct *work)
|
|||
smp_mb__before_atomic();
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
bnxt_ulp_start(bp, rc);
|
||||
bnxt_dl_health_recovery_done(bp);
|
||||
bnxt_dl_health_status_update(bp, true);
|
||||
rtnl_unlock();
|
||||
break;
|
||||
|
|
|
@ -89,7 +89,7 @@ static int bnxt_fw_reset_recover(struct devlink_health_reporter *reporter,
|
|||
return -EOPNOTSUPP;
|
||||
|
||||
bnxt_fw_reset(bp);
|
||||
return 0;
|
||||
return -EINPROGRESS;
|
||||
}
|
||||
|
||||
static const
|
||||
|
@ -116,7 +116,7 @@ static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter,
|
|||
else if (event == BNXT_FW_EXCEPTION_SP_EVENT)
|
||||
bnxt_fw_exception(bp);
|
||||
|
||||
return 0;
|
||||
return -EINPROGRESS;
|
||||
}
|
||||
|
||||
static const
|
||||
|
@ -262,6 +262,16 @@ void bnxt_dl_health_status_update(struct bnxt *bp, bool healthy)
|
|||
health->fatal = false;
|
||||
}
|
||||
|
||||
void bnxt_dl_health_recovery_done(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_fw_health *hlth = bp->fw_health;
|
||||
|
||||
if (hlth->fatal)
|
||||
devlink_health_reporter_recovery_done(hlth->fw_fatal_reporter);
|
||||
else
|
||||
devlink_health_reporter_recovery_done(hlth->fw_reset_reporter);
|
||||
}
|
||||
|
||||
static const struct devlink_ops bnxt_dl_ops = {
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
.eswitch_mode_set = bnxt_dl_eswitch_mode_set,
|
||||
|
|
|
@ -58,6 +58,7 @@ struct bnxt_dl_nvm_param {
|
|||
|
||||
void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event);
|
||||
void bnxt_dl_health_status_update(struct bnxt *bp, bool healthy);
|
||||
void bnxt_dl_health_recovery_done(struct bnxt *bp);
|
||||
void bnxt_dl_fw_reporters_create(struct bnxt *bp);
|
||||
void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all);
|
||||
int bnxt_dl_register(struct bnxt *bp);
|
||||
|
|
Loading…
Reference in New Issue