summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDean Luick <dean.luick@intel.com>2016-04-14 15:31:48 (GMT)
committerDoug Ledford <dledford@redhat.com>2016-04-28 20:32:29 (GMT)
commit1cbaa670355e4a4e339ac97167fb8ecf536045d3 (patch)
tree4f0741140e90daff26913fc652073a279555be82
parent015e91fbc9c6ab48596aa38fc0f8c8aab44036f9 (diff)
downloadlinux-1cbaa670355e4a4e339ac97167fb8ecf536045d3.tar.xz
IB/hfi1: Fix MAD port poll for active cables
A MAD directive to start polling must go through the normal link tuning and start steps in order to correctly handle active cables. Reviewed-by: Easwar Hariharan <easwar.hariharan@intel.com> Signed-off-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/staging/rdma/hfi1/mad.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/staging/rdma/hfi1/mad.c b/drivers/staging/rdma/hfi1/mad.c
index d1e7f4d..ed58cf2 100644
--- a/drivers/staging/rdma/hfi1/mad.c
+++ b/drivers/staging/rdma/hfi1/mad.c
@@ -999,7 +999,21 @@ static int set_port_states(struct hfi1_pportdata *ppd, struct opa_smp *smp,
break;
}
- set_link_state(ppd, link_state);
+ if ((link_state == HLS_DN_POLL ||
+ link_state == HLS_DN_DOWNDEF)) {
+ /*
+ * Going to poll. No matter what the current state,
+ * always move offline first, then tune and start the
+ * link. This correctly handles a FM link bounce and
+ * a link enable. Going offline is a no-op if already
+ * offline.
+ */
+ set_link_state(ppd, HLS_DN_OFFLINE);
+ tune_serdes(ppd);
+ start_link(ppd);
+ } else {
+ set_link_state(ppd, link_state);
+ }
if (link_state == HLS_DN_DISABLE &&
(ppd->offline_disabled_reason >
HFI1_ODR_MASK(OPA_LINKDOWN_REASON_SMA_DISABLED) ||