|
|
@@ -6951,6 +6951,15 @@ void handle_link_down(struct work_struct *work)
|
|
|
|
|
|
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);
|
|
|
|
|
|
/* disable the port */
|
|
|
@@ -10106,7 +10115,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
|
|
|
struct hfi1_devdata *dd = ppd->dd;
|
|
|
struct ib_event event = {.device = NULL};
|
|
|
int ret1, ret = 0;
|
|
|
- int was_up, is_down;
|
|
|
int orig_new_state, poll_bounce;
|
|
|
|
|
|
mutex_lock(&ppd->hls_lock);
|
|
|
@@ -10125,8 +10133,6 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
|
|
|
poll_bounce ? "(bounce) " : "",
|
|
|
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
|
|
|
* 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)
|
|
|
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;
|
|
|
|
|
|
unexpected:
|