Commit 015e91fb authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford

IB/hfi1: Correctly report neighbor link down reason

The code to save the link down reason for reporting to the SMA
was in a location before the actual reason was read.  Move the
SMA link down reason assignment to a better location.
Reviewed-by: default avatarEaswar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent feb831dd
...@@ -6951,6 +6951,15 @@ void handle_link_down(struct work_struct *work) ...@@ -6951,6 +6951,15 @@ void handle_link_down(struct work_struct *work)
set_link_down_reason(ppd, lcl_reason, neigh_reason, 0); set_link_down_reason(ppd, lcl_reason, neigh_reason, 0);
/* inform the SMA when the link transitions from up to down */
if (was_up && ppd->local_link_down_reason.sma == 0 &&
ppd->neigh_link_down_reason.sma == 0) {
ppd->local_link_down_reason.sma =
ppd->local_link_down_reason.latest;
ppd->neigh_link_down_reason.sma =
ppd->neigh_link_down_reason.latest;
}
reset_neighbor_info(ppd); reset_neighbor_info(ppd);
/* disable the port */ /* disable the port */
...@@ -10106,7 +10115,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state) ...@@ -10106,7 +10115,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
struct hfi1_devdata *dd = ppd->dd; struct hfi1_devdata *dd = ppd->dd;
struct ib_event event = {.device = NULL}; struct ib_event event = {.device = NULL};
int ret1, ret = 0; int ret1, ret = 0;
int was_up, is_down;
int orig_new_state, poll_bounce; int orig_new_state, poll_bounce;
mutex_lock(&ppd->hls_lock); mutex_lock(&ppd->hls_lock);
...@@ -10125,8 +10133,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state) ...@@ -10125,8 +10133,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
poll_bounce ? "(bounce) " : "", poll_bounce ? "(bounce) " : "",
link_state_reason_name(ppd, state)); link_state_reason_name(ppd, state));
was_up = !!(ppd->host_link_state & HLS_UP);
/* /*
* If we're going to a (HLS_*) link state that implies the logical * If we're going to a (HLS_*) link state that implies the logical
* link state is neither of (IB_PORT_ARMED, IB_PORT_ACTIVE), then * link state is neither of (IB_PORT_ARMED, IB_PORT_ACTIVE), then
...@@ -10337,17 +10343,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state) ...@@ -10337,17 +10343,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
break; break;
} }
is_down = !!(ppd->host_link_state & (HLS_DN_POLL |
HLS_DN_DISABLE | HLS_DN_OFFLINE));
if (was_up && is_down && ppd->local_link_down_reason.sma == 0 &&
ppd->neigh_link_down_reason.sma == 0) {
ppd->local_link_down_reason.sma =
ppd->local_link_down_reason.latest;
ppd->neigh_link_down_reason.sma =
ppd->neigh_link_down_reason.latest;
}
goto done; goto done;
unexpected: unexpected:
......
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