Skip to content

Commit

Permalink
IB/hfi1: Update SMA ingress checks for response packets
Browse files Browse the repository at this point in the history
Fix "unsupported method" error by skipping ingress pkey checks on
response SMA packets.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Jianxin Xiong <jianxin.xiong@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Jianxin Xiong authored and Doug Ledford committed Oct 2, 2016
1 parent e83eba2 commit f380920
Showing 1 changed file with 24 additions and 25 deletions.
49 changes: 24 additions & 25 deletions drivers/infiniband/hw/hfi1/ud.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,8 +559,8 @@ void return_cnp(struct hfi1_ibport *ibp, struct rvt_qp *qp, u32 remote_qpn,

/*
* opa_smp_check() - Do the regular pkey checking, and the additional
* checks for SMPs specified in OPAv1 rev 0.90, section 9.10.26
* ("SMA Packet Checks").
* checks for SMPs specified in OPAv1 rev 1.0, 9/19/2016 update, section
* 9.10.25 ("SMA Packet Checks").
*
* Note that:
* - Checks are done using the pkey directly from the packet's BTH,
Expand Down Expand Up @@ -603,23 +603,28 @@ static int opa_smp_check(struct hfi1_ibport *ibp, u16 pkey, u8 sc5,

/*
* SMPs fall into one of four (disjoint) categories:
* SMA request, SMA response, trap, or trap repress.
* Our response depends, in part, on which type of
* SMP we're processing.
* SMA request, SMA response, SMA trap, or SMA trap repress.
* Our response depends, in part, on which type of SMP we're
* processing.
*
* If this is not an SMA request, or trap repress:
* - accept MAD if the port is running an SM
* - pkey == FULL_MGMT_P_KEY =>
* reply with unsupported method (i.e., just mark
* the smp's status field here, and let it be
* processed normally)
* - pkey != LIM_MGMT_P_KEY =>
* increment port recv constraint errors, drop MAD
* If this is an SMA request or trap repress:
* If this is an SMA response, skip the check here.
*
* If this is an SMA request or SMA trap repress:
* - pkey != FULL_MGMT_P_KEY =>
* increment port recv constraint errors, drop MAD
*
* Otherwise:
* - accept if the port is running an SM
* - drop MAD if it's an SMA trap
* - pkey == FULL_MGMT_P_KEY =>
* reply with unsupported method
* - pkey != FULL_MGMT_P_KEY =>
* increment port recv constraint errors, drop MAD
*/
switch (smp->method) {
case IB_MGMT_METHOD_GET_RESP:
case IB_MGMT_METHOD_REPORT_RESP:
break;
case IB_MGMT_METHOD_GET:
case IB_MGMT_METHOD_SET:
case IB_MGMT_METHOD_REPORT:
Expand All @@ -629,23 +634,17 @@ static int opa_smp_check(struct hfi1_ibport *ibp, u16 pkey, u8 sc5,
return 1;
}
break;
case IB_MGMT_METHOD_SEND:
case IB_MGMT_METHOD_TRAP:
case IB_MGMT_METHOD_GET_RESP:
case IB_MGMT_METHOD_REPORT_RESP:
default:
if (ibp->rvp.port_cap_flags & IB_PORT_SM)
return 0;
if (smp->method == IB_MGMT_METHOD_TRAP)
return 1;
if (pkey == FULL_MGMT_P_KEY) {
smp->status |= IB_SMP_UNSUP_METHOD;
return 0;
}
if (pkey != LIM_MGMT_P_KEY) {
ingress_pkey_table_fail(ppd, pkey, slid);
return 1;
}
break;
default:
break;
ingress_pkey_table_fail(ppd, pkey, slid);
return 1;
}
return 0;
}
Expand Down

0 comments on commit f380920

Please sign in to comment.