Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −14
Original line number Diff line number Diff line
@@ -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: