Commit 91b60a71 authored by Jason Gunthorpe's avatar Jason Gunthorpe

RDMA/cm: Use IBA functions for simple structure members

Use a Coccinelle spatch script to replace use of simple CM structure
members with IBA_GET/SET versions. Applied with

$ spatch --sp-file edits.sp --in-place drivers/infiniband/core/cm.c

The spatch file was generated using the template pattern:

@@
expression val;
{struct} *msg;
@@
- msg->{old_name} = val
+ IBA_SET({new_name}, msg, be{bits}_to_cpu(val))
@@
{struct} *msg;
@@
- msg->{old_name}
+ cpu_to_be{bits}(IBA_GET({new_name}, msg))

Iterated for every IBA_CHECK_OFF that isn't a CM_FIELD_MLOC.

And the below iterated over all byte sizes to remove doubled byte swaps:

@@
expression val;
@@
-be{bits}_to_cpu(cpu_to_be{bits}(val))
+val

(and __be_to_cpu and ntoh varients)

Touched up with clang-format after.

Link: https://lore.kernel.org/r/20200116170037.30109-6-jgg@ziepe.caTested-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Reviewed-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 01adb7f4
...@@ -1251,9 +1251,11 @@ static void cm_format_req(struct cm_req_msg *req_msg, ...@@ -1251,9 +1251,11 @@ static void cm_format_req(struct cm_req_msg *req_msg,
cm_format_mad_hdr(&req_msg->hdr, CM_REQ_ATTR_ID, cm_format_mad_hdr(&req_msg->hdr, CM_REQ_ATTR_ID,
cm_form_tid(cm_id_priv)); cm_form_tid(cm_id_priv));
req_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_REQ_LOCAL_COMM_ID, req_msg,
req_msg->service_id = param->service_id; be32_to_cpu(cm_id_priv->id.local_id));
req_msg->local_ca_guid = cm_id_priv->id.device->node_guid; IBA_SET(CM_REQ_SERVICE_ID, req_msg, be64_to_cpu(param->service_id));
IBA_SET(CM_REQ_LOCAL_CA_GUID, req_msg,
be64_to_cpu(cm_id_priv->id.device->node_guid));
IBA_SET(CM_REQ_LOCAL_QPN, req_msg, param->qp_num); IBA_SET(CM_REQ_LOCAL_QPN, req_msg, param->qp_num);
IBA_SET(CM_REQ_INITIATOR_DEPTH, req_msg, param->initiator_depth); IBA_SET(CM_REQ_INITIATOR_DEPTH, req_msg, param->initiator_depth);
IBA_SET(CM_REQ_REMOTE_CM_RESPONSE_TIMEOUT, req_msg, IBA_SET(CM_REQ_REMOTE_CM_RESPONSE_TIMEOUT, req_msg,
...@@ -1263,7 +1265,8 @@ static void cm_format_req(struct cm_req_msg *req_msg, ...@@ -1263,7 +1265,8 @@ static void cm_format_req(struct cm_req_msg *req_msg,
IBA_SET(CM_REQ_STARTING_PSN, req_msg, param->starting_psn); IBA_SET(CM_REQ_STARTING_PSN, req_msg, param->starting_psn);
IBA_SET(CM_REQ_LOCAL_CM_RESPONSE_TIMEOUT, req_msg, IBA_SET(CM_REQ_LOCAL_CM_RESPONSE_TIMEOUT, req_msg,
param->local_cm_response_timeout); param->local_cm_response_timeout);
req_msg->pkey = param->primary_path->pkey; IBA_SET(CM_REQ_PARTITION_KEY, req_msg,
be16_to_cpu(param->primary_path->pkey));
IBA_SET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg, IBA_SET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg,
param->primary_path->mtu); param->primary_path->mtu);
IBA_SET(CM_REQ_MAX_CM_RETRIES, req_msg, param->max_cm_retries); IBA_SET(CM_REQ_MAX_CM_RETRIES, req_msg, param->max_cm_retries);
...@@ -1286,20 +1289,26 @@ static void cm_format_req(struct cm_req_msg *req_msg, ...@@ -1286,20 +1289,26 @@ static void cm_format_req(struct cm_req_msg *req_msg,
= OPA_MAKE_ID(be32_to_cpu(pri_path->opa.dlid)); = OPA_MAKE_ID(be32_to_cpu(pri_path->opa.dlid));
} }
if (pri_path->hop_limit <= 1) { if (pri_path->hop_limit <= 1) {
req_msg->primary_local_lid = pri_ext ? 0 : IBA_SET(CM_REQ_PRIMARY_LOCAL_PORT_LID, req_msg,
htons(ntohl(sa_path_get_slid(pri_path))); be16_to_cpu(pri_ext ? 0 :
req_msg->primary_remote_lid = pri_ext ? 0 : htons(ntohl(sa_path_get_slid(
htons(ntohl(sa_path_get_dlid(pri_path))); pri_path)))));
IBA_SET(CM_REQ_PRIMARY_REMOTE_PORT_LID, req_msg,
be16_to_cpu(pri_ext ? 0 :
htons(ntohl(sa_path_get_dlid(
pri_path)))));
} else { } else {
/* Work-around until there's a way to obtain remote LID info */ /* Work-around until there's a way to obtain remote LID info */
req_msg->primary_local_lid = IB_LID_PERMISSIVE; IBA_SET(CM_REQ_PRIMARY_LOCAL_PORT_LID, req_msg,
req_msg->primary_remote_lid = IB_LID_PERMISSIVE; be16_to_cpu(IB_LID_PERMISSIVE));
IBA_SET(CM_REQ_PRIMARY_REMOTE_PORT_LID, req_msg,
be16_to_cpu(IB_LID_PERMISSIVE));
} }
IBA_SET(CM_REQ_PRIMARY_FLOW_LABEL, req_msg, IBA_SET(CM_REQ_PRIMARY_FLOW_LABEL, req_msg,
be32_to_cpu(pri_path->flow_label)); be32_to_cpu(pri_path->flow_label));
IBA_SET(CM_REQ_PRIMARY_PACKET_RATE, req_msg, pri_path->rate); IBA_SET(CM_REQ_PRIMARY_PACKET_RATE, req_msg, pri_path->rate);
req_msg->primary_traffic_class = pri_path->traffic_class; IBA_SET(CM_REQ_PRIMARY_TRAFFIC_CLASS, req_msg, pri_path->traffic_class);
req_msg->primary_hop_limit = pri_path->hop_limit; IBA_SET(CM_REQ_PRIMARY_HOP_LIMIT, req_msg, pri_path->hop_limit);
IBA_SET(CM_REQ_PRIMARY_SL, req_msg, pri_path->sl); IBA_SET(CM_REQ_PRIMARY_SL, req_msg, pri_path->sl);
IBA_SET(CM_REQ_PRIMARY_SUBNET_LOCAL, req_msg, IBA_SET(CM_REQ_PRIMARY_SUBNET_LOCAL, req_msg,
(pri_path->hop_limit <= 1)); (pri_path->hop_limit <= 1));
...@@ -1323,19 +1332,29 @@ static void cm_format_req(struct cm_req_msg *req_msg, ...@@ -1323,19 +1332,29 @@ static void cm_format_req(struct cm_req_msg *req_msg,
= OPA_MAKE_ID(be32_to_cpu(alt_path->opa.dlid)); = OPA_MAKE_ID(be32_to_cpu(alt_path->opa.dlid));
} }
if (alt_path->hop_limit <= 1) { if (alt_path->hop_limit <= 1) {
req_msg->alt_local_lid = alt_ext ? 0 : IBA_SET(CM_REQ_ALTERNATE_LOCAL_PORT_LID, req_msg,
htons(ntohl(sa_path_get_slid(alt_path))); be16_to_cpu(
req_msg->alt_remote_lid = alt_ext ? 0 : alt_ext ? 0 :
htons(ntohl(sa_path_get_dlid(alt_path))); htons(ntohl(sa_path_get_slid(
alt_path)))));
IBA_SET(CM_REQ_ALTERNATE_REMOTE_PORT_LID, req_msg,
be16_to_cpu(
alt_ext ? 0 :
htons(ntohl(sa_path_get_dlid(
alt_path)))));
} else { } else {
req_msg->alt_local_lid = IB_LID_PERMISSIVE; IBA_SET(CM_REQ_ALTERNATE_LOCAL_PORT_LID, req_msg,
req_msg->alt_remote_lid = IB_LID_PERMISSIVE; be16_to_cpu(IB_LID_PERMISSIVE));
IBA_SET(CM_REQ_ALTERNATE_REMOTE_PORT_LID, req_msg,
be16_to_cpu(IB_LID_PERMISSIVE));
} }
IBA_SET(CM_REQ_ALTERNATE_FLOW_LABEL, req_msg, IBA_SET(CM_REQ_ALTERNATE_FLOW_LABEL, req_msg,
be32_to_cpu(alt_path->flow_label)); be32_to_cpu(alt_path->flow_label));
IBA_SET(CM_REQ_ALTERNATE_PACKET_RATE, req_msg, alt_path->rate); IBA_SET(CM_REQ_ALTERNATE_PACKET_RATE, req_msg, alt_path->rate);
req_msg->alt_traffic_class = alt_path->traffic_class; IBA_SET(CM_REQ_ALTERNATE_TRAFFIC_CLASS, req_msg,
req_msg->alt_hop_limit = alt_path->hop_limit; alt_path->traffic_class);
IBA_SET(CM_REQ_ALTERNATE_HOP_LIMIT, req_msg,
alt_path->hop_limit);
IBA_SET(CM_REQ_ALTERNATE_SL, req_msg, alt_path->sl); IBA_SET(CM_REQ_ALTERNATE_SL, req_msg, alt_path->sl);
IBA_SET(CM_REQ_ALTERNATE_SUBNET_LOCAL, req_msg, IBA_SET(CM_REQ_ALTERNATE_SUBNET_LOCAL, req_msg,
(alt_path->hop_limit <= 1)); (alt_path->hop_limit <= 1));
...@@ -1477,10 +1496,12 @@ static int cm_issue_rej(struct cm_port *port, ...@@ -1477,10 +1496,12 @@ static int cm_issue_rej(struct cm_port *port,
rej_msg = (struct cm_rej_msg *) msg->mad; rej_msg = (struct cm_rej_msg *) msg->mad;
cm_format_mad_hdr(&rej_msg->hdr, CM_REJ_ATTR_ID, rcv_msg->hdr.tid); cm_format_mad_hdr(&rej_msg->hdr, CM_REJ_ATTR_ID, rcv_msg->hdr.tid);
rej_msg->remote_comm_id = rcv_msg->local_comm_id; IBA_SET(CM_REJ_REMOTE_COMM_ID, rej_msg,
rej_msg->local_comm_id = rcv_msg->remote_comm_id; IBA_GET(CM_REJ_LOCAL_COMM_ID, rcv_msg));
IBA_SET(CM_REJ_LOCAL_COMM_ID, rej_msg,
IBA_GET(CM_REJ_REMOTE_COMM_ID, rcv_msg));
IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, msg_rejected); IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, msg_rejected);
rej_msg->reason = cpu_to_be16(reason); IBA_SET(CM_REJ_REASON, rej_msg, reason);
if (ari && ari_length) { if (ari && ari_length) {
IBA_SET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg, ari_length); IBA_SET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg, ari_length);
...@@ -1496,7 +1517,8 @@ static int cm_issue_rej(struct cm_port *port, ...@@ -1496,7 +1517,8 @@ static int cm_issue_rej(struct cm_port *port,
static bool cm_req_has_alt_path(struct cm_req_msg *req_msg) static bool cm_req_has_alt_path(struct cm_req_msg *req_msg)
{ {
return ((req_msg->alt_local_lid) || return ((cpu_to_be16(
IBA_GET(CM_REQ_ALTERNATE_LOCAL_PORT_LID, req_msg))) ||
(ib_is_opa_gid(&req_msg->alt_local_gid))); (ib_is_opa_gid(&req_msg->alt_local_gid)));
} }
...@@ -1517,9 +1539,11 @@ static void cm_format_path_lid_from_req(struct cm_req_msg *req_msg, ...@@ -1517,9 +1539,11 @@ static void cm_format_path_lid_from_req(struct cm_req_msg *req_msg,
if (primary_path->rec_type != SA_PATH_REC_TYPE_OPA) { if (primary_path->rec_type != SA_PATH_REC_TYPE_OPA) {
sa_path_set_dlid(primary_path, sa_path_set_dlid(primary_path,
ntohs(req_msg->primary_local_lid)); IBA_GET(CM_REQ_PRIMARY_LOCAL_PORT_LID,
req_msg));
sa_path_set_slid(primary_path, sa_path_set_slid(primary_path,
ntohs(req_msg->primary_remote_lid)); IBA_GET(CM_REQ_PRIMARY_REMOTE_PORT_LID,
req_msg));
} else { } else {
lid = opa_get_lid_from_gid(&req_msg->primary_local_gid); lid = opa_get_lid_from_gid(&req_msg->primary_local_gid);
sa_path_set_dlid(primary_path, lid); sa_path_set_dlid(primary_path, lid);
...@@ -1532,8 +1556,12 @@ static void cm_format_path_lid_from_req(struct cm_req_msg *req_msg, ...@@ -1532,8 +1556,12 @@ static void cm_format_path_lid_from_req(struct cm_req_msg *req_msg,
return; return;
if (alt_path->rec_type != SA_PATH_REC_TYPE_OPA) { if (alt_path->rec_type != SA_PATH_REC_TYPE_OPA) {
sa_path_set_dlid(alt_path, ntohs(req_msg->alt_local_lid)); sa_path_set_dlid(alt_path,
sa_path_set_slid(alt_path, ntohs(req_msg->alt_remote_lid)); IBA_GET(CM_REQ_ALTERNATE_LOCAL_PORT_LID,
req_msg));
sa_path_set_slid(alt_path,
IBA_GET(CM_REQ_ALTERNATE_REMOTE_PORT_LID,
req_msg));
} else { } else {
lid = opa_get_lid_from_gid(&req_msg->alt_local_gid); lid = opa_get_lid_from_gid(&req_msg->alt_local_gid);
sa_path_set_dlid(alt_path, lid); sa_path_set_dlid(alt_path, lid);
...@@ -1551,10 +1579,12 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg, ...@@ -1551,10 +1579,12 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
primary_path->sgid = req_msg->primary_remote_gid; primary_path->sgid = req_msg->primary_remote_gid;
primary_path->flow_label = primary_path->flow_label =
cpu_to_be32(IBA_GET(CM_REQ_PRIMARY_FLOW_LABEL, req_msg)); cpu_to_be32(IBA_GET(CM_REQ_PRIMARY_FLOW_LABEL, req_msg));
primary_path->hop_limit = req_msg->primary_hop_limit; primary_path->hop_limit = IBA_GET(CM_REQ_PRIMARY_HOP_LIMIT, req_msg);
primary_path->traffic_class = req_msg->primary_traffic_class; primary_path->traffic_class =
IBA_GET(CM_REQ_PRIMARY_TRAFFIC_CLASS, req_msg);
primary_path->reversible = 1; primary_path->reversible = 1;
primary_path->pkey = req_msg->pkey; primary_path->pkey =
cpu_to_be16(IBA_GET(CM_REQ_PARTITION_KEY, req_msg));
primary_path->sl = IBA_GET(CM_REQ_PRIMARY_SL, req_msg); primary_path->sl = IBA_GET(CM_REQ_PRIMARY_SL, req_msg);
primary_path->mtu_selector = IB_SA_EQ; primary_path->mtu_selector = IB_SA_EQ;
primary_path->mtu = IBA_GET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg); primary_path->mtu = IBA_GET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg);
...@@ -1564,7 +1594,8 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg, ...@@ -1564,7 +1594,8 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
primary_path->packet_life_time = primary_path->packet_life_time =
IBA_GET(CM_REQ_PRIMARY_LOCAL_ACK_TIMEOUT, req_msg); IBA_GET(CM_REQ_PRIMARY_LOCAL_ACK_TIMEOUT, req_msg);
primary_path->packet_life_time -= (primary_path->packet_life_time > 0); primary_path->packet_life_time -= (primary_path->packet_life_time > 0);
primary_path->service_id = req_msg->service_id; primary_path->service_id =
cpu_to_be64(IBA_GET(CM_REQ_SERVICE_ID, req_msg));
if (sa_path_is_roce(primary_path)) if (sa_path_is_roce(primary_path))
primary_path->roce.route_resolved = false; primary_path->roce.route_resolved = false;
...@@ -1573,10 +1604,13 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg, ...@@ -1573,10 +1604,13 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
alt_path->sgid = req_msg->alt_remote_gid; alt_path->sgid = req_msg->alt_remote_gid;
alt_path->flow_label = cpu_to_be32( alt_path->flow_label = cpu_to_be32(
IBA_GET(CM_REQ_ALTERNATE_FLOW_LABEL, req_msg)); IBA_GET(CM_REQ_ALTERNATE_FLOW_LABEL, req_msg));
alt_path->hop_limit = req_msg->alt_hop_limit; alt_path->hop_limit =
alt_path->traffic_class = req_msg->alt_traffic_class; IBA_GET(CM_REQ_ALTERNATE_HOP_LIMIT, req_msg);
alt_path->traffic_class =
IBA_GET(CM_REQ_ALTERNATE_TRAFFIC_CLASS, req_msg);
alt_path->reversible = 1; alt_path->reversible = 1;
alt_path->pkey = req_msg->pkey; alt_path->pkey =
cpu_to_be16(IBA_GET(CM_REQ_PARTITION_KEY, req_msg));
alt_path->sl = IBA_GET(CM_REQ_ALTERNATE_SL, req_msg); alt_path->sl = IBA_GET(CM_REQ_ALTERNATE_SL, req_msg);
alt_path->mtu_selector = IB_SA_EQ; alt_path->mtu_selector = IB_SA_EQ;
alt_path->mtu = alt_path->mtu =
...@@ -1587,7 +1621,8 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg, ...@@ -1587,7 +1621,8 @@ static void cm_format_paths_from_req(struct cm_req_msg *req_msg,
alt_path->packet_life_time = alt_path->packet_life_time =
IBA_GET(CM_REQ_ALTERNATE_LOCAL_ACK_TIMEOUT, req_msg); IBA_GET(CM_REQ_ALTERNATE_LOCAL_ACK_TIMEOUT, req_msg);
alt_path->packet_life_time -= (alt_path->packet_life_time > 0); alt_path->packet_life_time -= (alt_path->packet_life_time > 0);
alt_path->service_id = req_msg->service_id; alt_path->service_id =
cpu_to_be64(IBA_GET(CM_REQ_SERVICE_ID, req_msg));
if (sa_path_is_roce(alt_path)) if (sa_path_is_roce(alt_path))
alt_path->roce.route_resolved = false; alt_path->roce.route_resolved = false;
...@@ -1662,8 +1697,9 @@ static void cm_format_req_event(struct cm_work *work, ...@@ -1662,8 +1697,9 @@ static void cm_format_req_event(struct cm_work *work,
} else { } else {
param->alternate_path = NULL; param->alternate_path = NULL;
} }
param->remote_ca_guid = req_msg->local_ca_guid; param->remote_ca_guid =
param->remote_qkey = be32_to_cpu(req_msg->local_qkey); cpu_to_be64(IBA_GET(CM_REQ_LOCAL_CA_GUID, req_msg));
param->remote_qkey = IBA_GET(CM_REQ_LOCAL_Q_KEY, req_msg);
param->remote_qpn = IBA_GET(CM_REQ_LOCAL_QPN, req_msg); param->remote_qpn = IBA_GET(CM_REQ_LOCAL_QPN, req_msg);
param->qp_type = cm_req_get_qp_type(req_msg); param->qp_type = cm_req_get_qp_type(req_msg);
param->starting_psn = IBA_GET(CM_REQ_STARTING_PSN, req_msg); param->starting_psn = IBA_GET(CM_REQ_STARTING_PSN, req_msg);
...@@ -1713,8 +1749,10 @@ static void cm_format_mra(struct cm_mra_msg *mra_msg, ...@@ -1713,8 +1749,10 @@ static void cm_format_mra(struct cm_mra_msg *mra_msg,
{ {
cm_format_mad_hdr(&mra_msg->hdr, CM_MRA_ATTR_ID, cm_id_priv->tid); cm_format_mad_hdr(&mra_msg->hdr, CM_MRA_ATTR_ID, cm_id_priv->tid);
IBA_SET(CM_MRA_MESSAGE_MRAED, mra_msg, msg_mraed); IBA_SET(CM_MRA_MESSAGE_MRAED, mra_msg, msg_mraed);
mra_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_MRA_LOCAL_COMM_ID, mra_msg,
mra_msg->remote_comm_id = cm_id_priv->id.remote_id; be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_MRA_REMOTE_COMM_ID, mra_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
IBA_SET(CM_MRA_SERVICE_TIMEOUT, mra_msg, service_timeout); IBA_SET(CM_MRA_SERVICE_TIMEOUT, mra_msg, service_timeout);
if (private_data && private_data_len) if (private_data && private_data_len)
...@@ -1730,30 +1768,34 @@ static void cm_format_rej(struct cm_rej_msg *rej_msg, ...@@ -1730,30 +1768,34 @@ static void cm_format_rej(struct cm_rej_msg *rej_msg,
u8 private_data_len) u8 private_data_len)
{ {
cm_format_mad_hdr(&rej_msg->hdr, CM_REJ_ATTR_ID, cm_id_priv->tid); cm_format_mad_hdr(&rej_msg->hdr, CM_REJ_ATTR_ID, cm_id_priv->tid);
rej_msg->remote_comm_id = cm_id_priv->id.remote_id; IBA_SET(CM_REJ_REMOTE_COMM_ID, rej_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
switch(cm_id_priv->id.state) { switch(cm_id_priv->id.state) {
case IB_CM_REQ_RCVD: case IB_CM_REQ_RCVD:
rej_msg->local_comm_id = 0; IBA_SET(CM_REJ_LOCAL_COMM_ID, rej_msg, be32_to_cpu(0));
IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REQ); IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REQ);
break; break;
case IB_CM_MRA_REQ_SENT: case IB_CM_MRA_REQ_SENT:
rej_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_REJ_LOCAL_COMM_ID, rej_msg,
be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REQ); IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REQ);
break; break;
case IB_CM_REP_RCVD: case IB_CM_REP_RCVD:
case IB_CM_MRA_REP_SENT: case IB_CM_MRA_REP_SENT:
rej_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_REJ_LOCAL_COMM_ID, rej_msg,
be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REP); IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, CM_MSG_RESPONSE_REP);
break; break;
default: default:
rej_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_REJ_LOCAL_COMM_ID, rej_msg,
be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg, IBA_SET(CM_REJ_MESSAGE_REJECTED, rej_msg,
CM_MSG_RESPONSE_OTHER); CM_MSG_RESPONSE_OTHER);
break; break;
} }
rej_msg->reason = cpu_to_be16(reason); IBA_SET(CM_REJ_REASON, rej_msg, reason);
if (ari && ari_length) { if (ari && ari_length) {
IBA_SET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg, ari_length); IBA_SET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg, ari_length);
memcpy(rej_msg->ari, ari, ari_length); memcpy(rej_msg->ari, ari, ari_length);
...@@ -1850,8 +1892,9 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, ...@@ -1850,8 +1892,9 @@ static struct cm_id_private * cm_match_req(struct cm_work *work,
} }
/* Find matching listen request. */ /* Find matching listen request. */
listen_cm_id_priv = cm_find_listen(cm_id_priv->id.device, listen_cm_id_priv = cm_find_listen(
req_msg->service_id); cm_id_priv->id.device,
cpu_to_be64(IBA_GET(CM_REQ_SERVICE_ID, req_msg)));
if (!listen_cm_id_priv) { if (!listen_cm_id_priv) {
cm_cleanup_timewait(cm_id_priv->timewait_info); cm_cleanup_timewait(cm_id_priv->timewait_info);
spin_unlock_irq(&cm.lock); spin_unlock_irq(&cm.lock);
...@@ -1877,23 +1920,31 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, ...@@ -1877,23 +1920,31 @@ static struct cm_id_private * cm_match_req(struct cm_work *work,
static void cm_process_routed_req(struct cm_req_msg *req_msg, struct ib_wc *wc) static void cm_process_routed_req(struct cm_req_msg *req_msg, struct ib_wc *wc)
{ {
if (!IBA_GET(CM_REQ_PRIMARY_SUBNET_LOCAL, req_msg)) { if (!IBA_GET(CM_REQ_PRIMARY_SUBNET_LOCAL, req_msg)) {
if (req_msg->primary_local_lid == IB_LID_PERMISSIVE) { if (cpu_to_be16(IBA_GET(CM_REQ_PRIMARY_LOCAL_PORT_LID,
req_msg->primary_local_lid = ib_lid_be16(wc->slid); req_msg)) == IB_LID_PERMISSIVE) {
IBA_SET(CM_REQ_PRIMARY_LOCAL_PORT_LID, req_msg,
be16_to_cpu(ib_lid_be16(wc->slid)));
IBA_SET(CM_REQ_PRIMARY_SL, req_msg, wc->sl); IBA_SET(CM_REQ_PRIMARY_SL, req_msg, wc->sl);
} }
if (req_msg->primary_remote_lid == IB_LID_PERMISSIVE) if (cpu_to_be16(IBA_GET(CM_REQ_PRIMARY_REMOTE_PORT_LID,
req_msg->primary_remote_lid = cpu_to_be16(wc->dlid_path_bits); req_msg)) == IB_LID_PERMISSIVE)
IBA_SET(CM_REQ_PRIMARY_REMOTE_PORT_LID, req_msg,
wc->dlid_path_bits);
} }
if (!IBA_GET(CM_REQ_ALTERNATE_SUBNET_LOCAL, req_msg)) { if (!IBA_GET(CM_REQ_ALTERNATE_SUBNET_LOCAL, req_msg)) {
if (req_msg->alt_local_lid == IB_LID_PERMISSIVE) { if (cpu_to_be16(IBA_GET(CM_REQ_ALTERNATE_LOCAL_PORT_LID,
req_msg->alt_local_lid = ib_lid_be16(wc->slid); req_msg)) == IB_LID_PERMISSIVE) {
IBA_SET(CM_REQ_ALTERNATE_LOCAL_PORT_LID, req_msg,
be16_to_cpu(ib_lid_be16(wc->slid)));
IBA_SET(CM_REQ_ALTERNATE_SL, req_msg, wc->sl); IBA_SET(CM_REQ_ALTERNATE_SL, req_msg, wc->sl);
} }
if (req_msg->alt_remote_lid == IB_LID_PERMISSIVE) if (cpu_to_be16(IBA_GET(CM_REQ_ALTERNATE_REMOTE_PORT_LID,
req_msg->alt_remote_lid = cpu_to_be16(wc->dlid_path_bits); req_msg)) == IB_LID_PERMISSIVE)
IBA_SET(CM_REQ_ALTERNATE_REMOTE_PORT_LID, req_msg,
wc->dlid_path_bits);
} }
} }
...@@ -1913,7 +1964,8 @@ static int cm_req_handler(struct cm_work *work) ...@@ -1913,7 +1964,8 @@ static int cm_req_handler(struct cm_work *work)
return PTR_ERR(cm_id); return PTR_ERR(cm_id);
cm_id_priv = container_of(cm_id, struct cm_id_private, id); cm_id_priv = container_of(cm_id, struct cm_id_private, id);
cm_id_priv->id.remote_id = req_msg->local_comm_id; cm_id_priv->id.remote_id =
cpu_to_be32(IBA_GET(CM_REQ_LOCAL_COMM_ID, req_msg));
ret = cm_init_av_for_response(work->port, work->mad_recv_wc->wc, ret = cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
work->mad_recv_wc->recv_buf.grh, work->mad_recv_wc->recv_buf.grh,
&cm_id_priv->av); &cm_id_priv->av);
...@@ -1925,8 +1977,10 @@ static int cm_req_handler(struct cm_work *work) ...@@ -1925,8 +1977,10 @@ static int cm_req_handler(struct cm_work *work)
ret = PTR_ERR(cm_id_priv->timewait_info); ret = PTR_ERR(cm_id_priv->timewait_info);
goto destroy; goto destroy;
} }
cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id; cm_id_priv->timewait_info->work.remote_id =
cm_id_priv->timewait_info->remote_ca_guid = req_msg->local_ca_guid; cpu_to_be32(IBA_GET(CM_REQ_LOCAL_COMM_ID, req_msg));
cm_id_priv->timewait_info->remote_ca_guid =
cpu_to_be64(IBA_GET(CM_REQ_LOCAL_CA_GUID, req_msg));
cm_id_priv->timewait_info->remote_qpn = cm_id_priv->timewait_info->remote_qpn =
cpu_to_be32(IBA_GET(CM_REQ_LOCAL_QPN, req_msg)); cpu_to_be32(IBA_GET(CM_REQ_LOCAL_QPN, req_msg));
...@@ -1940,7 +1994,8 @@ static int cm_req_handler(struct cm_work *work) ...@@ -1940,7 +1994,8 @@ static int cm_req_handler(struct cm_work *work)
cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler; cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler;
cm_id_priv->id.context = listen_cm_id_priv->id.context; cm_id_priv->id.context = listen_cm_id_priv->id.context;
cm_id_priv->id.service_id = req_msg->service_id; cm_id_priv->id.service_id =
cpu_to_be64(IBA_GET(CM_REQ_SERVICE_ID, req_msg));
cm_id_priv->id.service_mask = ~cpu_to_be64(0); cm_id_priv->id.service_mask = ~cpu_to_be64(0);
cm_process_routed_req(req_msg, work->mad_recv_wc->wc); cm_process_routed_req(req_msg, work->mad_recv_wc->wc);
...@@ -2009,7 +2064,7 @@ static int cm_req_handler(struct cm_work *work) ...@@ -2009,7 +2064,7 @@ static int cm_req_handler(struct cm_work *work)
cm_id_priv->responder_resources = cm_id_priv->responder_resources =
IBA_GET(CM_REQ_INITIATOR_DEPTH, req_msg); IBA_GET(CM_REQ_INITIATOR_DEPTH, req_msg);
cm_id_priv->path_mtu = IBA_GET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg); cm_id_priv->path_mtu = IBA_GET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg);
cm_id_priv->pkey = req_msg->pkey; cm_id_priv->pkey = cpu_to_be16(IBA_GET(CM_REQ_PARTITION_KEY, req_msg));
cm_id_priv->sq_psn = cpu_to_be32(IBA_GET(CM_REQ_STARTING_PSN, req_msg)); cm_id_priv->sq_psn = cpu_to_be32(IBA_GET(CM_REQ_STARTING_PSN, req_msg));
cm_id_priv->retry_count = IBA_GET(CM_REQ_RETRY_COUNT, req_msg); cm_id_priv->retry_count = IBA_GET(CM_REQ_RETRY_COUNT, req_msg);
cm_id_priv->rnr_retry_count = IBA_GET(CM_REQ_RNR_RETRY_COUNT, req_msg); cm_id_priv->rnr_retry_count = IBA_GET(CM_REQ_RNR_RETRY_COUNT, req_msg);
...@@ -2035,18 +2090,23 @@ static void cm_format_rep(struct cm_rep_msg *rep_msg, ...@@ -2035,18 +2090,23 @@ static void cm_format_rep(struct cm_rep_msg *rep_msg,
struct ib_cm_rep_param *param) struct ib_cm_rep_param *param)
{ {
cm_format_mad_hdr(&rep_msg->hdr, CM_REP_ATTR_ID, cm_id_priv->tid); cm_format_mad_hdr(&rep_msg->hdr, CM_REP_ATTR_ID, cm_id_priv->tid);
rep_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_REP_LOCAL_COMM_ID, rep_msg,
rep_msg->remote_comm_id = cm_id_priv->id.remote_id; be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_REP_REMOTE_COMM_ID, rep_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
IBA_SET(CM_REP_STARTING_PSN, rep_msg, param->starting_psn); IBA_SET(CM_REP_STARTING_PSN, rep_msg, param->starting_psn);
rep_msg->resp_resources = param->responder_resources; IBA_SET(CM_REP_RESPONDER_RESOURCES, rep_msg,
param->responder_resources);
IBA_SET(CM_REP_TARGET_ACK_DELAY, rep_msg, IBA_SET(CM_REP_TARGET_ACK_DELAY, rep_msg,
cm_id_priv->av.port->cm_dev->ack_delay); cm_id_priv->av.port->cm_dev->ack_delay);
IBA_SET(CM_REP_FAILOVER_ACCEPTED, rep_msg, param->failover_accepted); IBA_SET(CM_REP_FAILOVER_ACCEPTED, rep_msg, param->failover_accepted);
IBA_SET(CM_REP_RNR_RETRY_COUNT, rep_msg, param->rnr_retry_count); IBA_SET(CM_REP_RNR_RETRY_COUNT, rep_msg, param->rnr_retry_count);
rep_msg->local_ca_guid = cm_id_priv->id.device->node_guid; IBA_SET(CM_REP_LOCAL_CA_GUID, rep_msg,
be64_to_cpu(cm_id_priv->id.device->node_guid));
if (cm_id_priv->qp_type != IB_QPT_XRC_TGT) { if (cm_id_priv->qp_type != IB_QPT_XRC_TGT) {
rep_msg->initiator_depth = param->initiator_depth; IBA_SET(CM_REP_INITIATOR_DEPTH, rep_msg,
param->initiator_depth);
IBA_SET(CM_REP_END_TO_END_FLOW_CONTROL, rep_msg, IBA_SET(CM_REP_END_TO_END_FLOW_CONTROL, rep_msg,
param->flow_control); param->flow_control);
IBA_SET(CM_REP_SRQ, rep_msg, param->srq); IBA_SET(CM_REP_SRQ, rep_msg, param->srq);
...@@ -2118,8 +2178,10 @@ static void cm_format_rtu(struct cm_rtu_msg *rtu_msg, ...@@ -2118,8 +2178,10 @@ static void cm_format_rtu(struct cm_rtu_msg *rtu_msg,
u8 private_data_len) u8 private_data_len)
{ {
cm_format_mad_hdr(&rtu_msg->hdr, CM_RTU_ATTR_ID, cm_id_priv->tid); cm_format_mad_hdr(&rtu_msg->hdr, CM_RTU_ATTR_ID, cm_id_priv->tid);
rtu_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_RTU_LOCAL_COMM_ID, rtu_msg,
rtu_msg->remote_comm_id = cm_id_priv->id.remote_id; be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_RTU_REMOTE_COMM_ID, rtu_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
if (private_data && private_data_len) if (private_data && private_data_len)
memcpy(rtu_msg->private_data, private_data, private_data_len); memcpy(rtu_msg->private_data, private_data, private_data_len);
...@@ -2185,12 +2247,13 @@ static void cm_format_rep_event(struct cm_work *work, enum ib_qp_type qp_type) ...@@ -2185,12 +2247,13 @@ static void cm_format_rep_event(struct cm_work *work, enum ib_qp_type qp_type)
rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad; rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad;
param = &work->cm_event.param.rep_rcvd; param = &work->cm_event.param.rep_rcvd;
param->remote_ca_guid = rep_msg->local_ca_guid; param->remote_ca_guid =
param->remote_qkey = be32_to_cpu(rep_msg->local_qkey); cpu_to_be64(IBA_GET(CM_REP_LOCAL_CA_GUID, rep_msg));
param->remote_qkey = IBA_GET(CM_REP_LOCAL_Q_KEY, rep_msg);
param->remote_qpn = be32_to_cpu(cm_rep_get_qpn(rep_msg, qp_type)); param->remote_qpn = be32_to_cpu(cm_rep_get_qpn(rep_msg, qp_type));
param->starting_psn = IBA_GET(CM_REP_STARTING_PSN, rep_msg); param->starting_psn = IBA_GET(CM_REP_STARTING_PSN, rep_msg);
param->responder_resources = rep_msg->initiator_depth; param->responder_resources = IBA_GET(CM_REP_INITIATOR_DEPTH, rep_msg);
param->initiator_depth = rep_msg->resp_resources; param->initiator_depth = IBA_GET(CM_REP_RESPONDER_RESOURCES, rep_msg);
param->target_ack_delay = IBA_GET(CM_REP_TARGET_ACK_DELAY, rep_msg); param->target_ack_delay = IBA_GET(CM_REP_TARGET_ACK_DELAY, rep_msg);
param->failover_accepted = IBA_GET(CM_REP_FAILOVER_ACCEPTED, rep_msg); param->failover_accepted = IBA_GET(CM_REP_FAILOVER_ACCEPTED, rep_msg);
param->flow_control = IBA_GET(CM_REP_END_TO_END_FLOW_CONTROL, rep_msg); param->flow_control = IBA_GET(CM_REP_END_TO_END_FLOW_CONTROL, rep_msg);
...@@ -2207,8 +2270,9 @@ static void cm_dup_rep_handler(struct cm_work *work) ...@@ -2207,8 +2270,9 @@ static void cm_dup_rep_handler(struct cm_work *work)
int ret; int ret;
rep_msg = (struct cm_rep_msg *) work->mad_recv_wc->recv_buf.mad; rep_msg = (struct cm_rep_msg *) work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(rep_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
rep_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg)),
cpu_to_be32(IBA_GET(CM_REP_LOCAL_COMM_ID, rep_msg)));
if (!cm_id_priv) if (!cm_id_priv)
return; return;
...@@ -2252,11 +2316,12 @@ static int cm_rep_handler(struct cm_work *work) ...@@ -2252,11 +2316,12 @@ static int cm_rep_handler(struct cm_work *work)
struct cm_timewait_info *timewait_info; struct cm_timewait_info *timewait_info;
rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad; rep_msg = (struct cm_rep_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(rep_msg->remote_comm_id, 0); cm_id_priv = cm_acquire_id(
cpu_to_be32(IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg)), 0);
if (!cm_id_priv) { if (!cm_id_priv) {
cm_dup_rep_handler(work); cm_dup_rep_handler(work);
pr_debug("%s: remote_comm_id %d, no cm_id_priv\n", __func__, pr_debug("%s: remote_comm_id %d, no cm_id_priv\n", __func__,
be32_to_cpu(rep_msg->remote_comm_id)); IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg));
return -EINVAL; return -EINVAL;
} }
...@@ -2270,15 +2335,18 @@ static int cm_rep_handler(struct cm_work *work) ...@@ -2270,15 +2335,18 @@ static int cm_rep_handler(struct cm_work *work)
default: default:
spin_unlock_irq(&cm_id_priv->lock); spin_unlock_irq(&cm_id_priv->lock);
ret = -EINVAL; ret = -EINVAL;
pr_debug("%s: cm_id_priv->id.state: %d, local_comm_id %d, remote_comm_id %d\n", pr_debug(
__func__, cm_id_priv->id.state, "%s: cm_id_priv->id.state: %d, local_comm_id %d, remote_comm_id %d\n",
be32_to_cpu(rep_msg->local_comm_id), __func__, cm_id_priv->id.state,
be32_to_cpu(rep_msg->remote_comm_id)); IBA_GET(CM_REP_LOCAL_COMM_ID, rep_msg),
IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg));
goto error; goto error;
} }
cm_id_priv->timewait_info->work.remote_id = rep_msg->local_comm_id; cm_id_priv->timewait_info->work.remote_id =
cm_id_priv->timewait_info->remote_ca_guid = rep_msg->local_ca_guid; cpu_to_be32(IBA_GET(CM_REP_LOCAL_COMM_ID, rep_msg));
cm_id_priv->timewait_info->remote_ca_guid =
cpu_to_be64(IBA_GET(CM_REP_LOCAL_CA_GUID, rep_msg));
cm_id_priv->timewait_info->remote_qpn = cm_rep_get_qpn(rep_msg, cm_id_priv->qp_type); cm_id_priv->timewait_info->remote_qpn = cm_rep_get_qpn(rep_msg, cm_id_priv->qp_type);
spin_lock(&cm.lock); spin_lock(&cm.lock);
...@@ -2288,7 +2356,7 @@ static int cm_rep_handler(struct cm_work *work) ...@@ -2288,7 +2356,7 @@ static int cm_rep_handler(struct cm_work *work)
spin_unlock_irq(&cm_id_priv->lock); spin_unlock_irq(&cm_id_priv->lock);
ret = -EINVAL; ret = -EINVAL;
pr_debug("%s: Failed to insert remote id %d\n", __func__, pr_debug("%s: Failed to insert remote id %d\n", __func__,
be32_to_cpu(rep_msg->remote_comm_id)); IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg));
goto error; goto error;
} }
/* Check for a stale connection. */ /* Check for a stale connection. */
...@@ -2306,9 +2374,10 @@ static int cm_rep_handler(struct cm_work *work) ...@@ -2306,9 +2374,10 @@ static int cm_rep_handler(struct cm_work *work)
IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REP, IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REP,
NULL, 0); NULL, 0);
ret = -EINVAL; ret = -EINVAL;
pr_debug("%s: Stale connection. local_comm_id %d, remote_comm_id %d\n", pr_debug(
__func__, be32_to_cpu(rep_msg->local_comm_id), "%s: Stale connection. local_comm_id %d, remote_comm_id %d\n",
be32_to_cpu(rep_msg->remote_comm_id)); __func__, IBA_GET(CM_REP_LOCAL_COMM_ID, rep_msg),
IBA_GET(CM_REP_REMOTE_COMM_ID, rep_msg));
if (cur_cm_id_priv) { if (cur_cm_id_priv) {
cm_id = &cur_cm_id_priv->id; cm_id = &cur_cm_id_priv->id;
...@@ -2321,10 +2390,13 @@ static int cm_rep_handler(struct cm_work *work) ...@@ -2321,10 +2390,13 @@ static int cm_rep_handler(struct cm_work *work)
spin_unlock(&cm.lock); spin_unlock(&cm.lock);
cm_id_priv->id.state = IB_CM_REP_RCVD; cm_id_priv->id.state = IB_CM_REP_RCVD;
cm_id_priv->id.remote_id = rep_msg->local_comm_id; cm_id_priv->id.remote_id =
cpu_to_be32(IBA_GET(CM_REP_LOCAL_COMM_ID, rep_msg));
cm_id_priv->remote_qpn = cm_rep_get_qpn(rep_msg, cm_id_priv->qp_type); cm_id_priv->remote_qpn = cm_rep_get_qpn(rep_msg, cm_id_priv->qp_type);
cm_id_priv->initiator_depth = rep_msg->resp_resources; cm_id_priv->initiator_depth =
cm_id_priv->responder_resources = rep_msg->initiator_depth; IBA_GET(CM_REP_RESPONDER_RESOURCES, rep_msg);
cm_id_priv->responder_resources =
IBA_GET(CM_REP_INITIATOR_DEPTH, rep_msg);
cm_id_priv->sq_psn = cpu_to_be32(IBA_GET(CM_REP_STARTING_PSN, rep_msg)); cm_id_priv->sq_psn = cpu_to_be32(IBA_GET(CM_REP_STARTING_PSN, rep_msg));
cm_id_priv->rnr_retry_count = IBA_GET(CM_REP_RNR_RETRY_COUNT, rep_msg); cm_id_priv->rnr_retry_count = IBA_GET(CM_REP_RNR_RETRY_COUNT, rep_msg);
cm_id_priv->target_ack_delay = cm_id_priv->target_ack_delay =
...@@ -2394,8 +2466,9 @@ static int cm_rtu_handler(struct cm_work *work) ...@@ -2394,8 +2466,9 @@ static int cm_rtu_handler(struct cm_work *work)
int ret; int ret;
rtu_msg = (struct cm_rtu_msg *)work->mad_recv_wc->recv_buf.mad; rtu_msg = (struct cm_rtu_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(rtu_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
rtu_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_RTU_REMOTE_COMM_ID, rtu_msg)),
cpu_to_be32(IBA_GET(CM_RTU_LOCAL_COMM_ID, rtu_msg)));
if (!cm_id_priv) if (!cm_id_priv)
return -EINVAL; return -EINVAL;
...@@ -2434,8 +2507,10 @@ static void cm_format_dreq(struct cm_dreq_msg *dreq_msg, ...@@ -2434,8 +2507,10 @@ static void cm_format_dreq(struct cm_dreq_msg *dreq_msg,
{ {
cm_format_mad_hdr(&dreq_msg->hdr, CM_DREQ_ATTR_ID, cm_format_mad_hdr(&dreq_msg->hdr, CM_DREQ_ATTR_ID,
cm_form_tid(cm_id_priv)); cm_form_tid(cm_id_priv));
dreq_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_DREQ_LOCAL_COMM_ID, dreq_msg,
dreq_msg->remote_comm_id = cm_id_priv->id.remote_id; be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_DREQ_REMOTE_COMM_ID, dreq_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
IBA_SET(CM_DREQ_REMOTE_QPN_EECN, dreq_msg, IBA_SET(CM_DREQ_REMOTE_QPN_EECN, dreq_msg,
be32_to_cpu(cm_id_priv->remote_qpn)); be32_to_cpu(cm_id_priv->remote_qpn));
...@@ -2500,8 +2575,10 @@ static void cm_format_drep(struct cm_drep_msg *drep_msg, ...@@ -2500,8 +2575,10 @@ static void cm_format_drep(struct cm_drep_msg *drep_msg,
u8 private_data_len) u8 private_data_len)
{ {
cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, cm_id_priv->tid); cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, cm_id_priv->tid);
drep_msg->local_comm_id = cm_id_priv->id.local_id; IBA_SET(CM_DREP_LOCAL_COMM_ID, drep_msg,
drep_msg->remote_comm_id = cm_id_priv->id.remote_id; be32_to_cpu(cm_id_priv->id.local_id));
IBA_SET(CM_DREP_REMOTE_COMM_ID, drep_msg,
be32_to_cpu(cm_id_priv->id.remote_id));
if (private_data && private_data_len) if (private_data && private_data_len)
memcpy(drep_msg->private_data, private_data, private_data_len); memcpy(drep_msg->private_data, private_data, private_data_len);
...@@ -2572,8 +2649,10 @@ static int cm_issue_drep(struct cm_port *port, ...@@ -2572,8 +2649,10 @@ static int cm_issue_drep(struct cm_port *port,
drep_msg = (struct cm_drep_msg *) msg->mad; drep_msg = (struct cm_drep_msg *) msg->mad;
cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, dreq_msg->hdr.tid); cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, dreq_msg->hdr.tid);
drep_msg->remote_comm_id = dreq_msg->local_comm_id; IBA_SET(CM_DREP_REMOTE_COMM_ID, drep_msg,
drep_msg->local_comm_id = dreq_msg->remote_comm_id; IBA_GET(CM_DREQ_LOCAL_COMM_ID, dreq_msg));
IBA_SET(CM_DREP_LOCAL_COMM_ID, drep_msg,
IBA_GET(CM_DREQ_REMOTE_COMM_ID, dreq_msg));
ret = ib_post_send_mad(msg, NULL); ret = ib_post_send_mad(msg, NULL);
if (ret) if (ret)
...@@ -2590,15 +2669,17 @@ static int cm_dreq_handler(struct cm_work *work) ...@@ -2590,15 +2669,17 @@ static int cm_dreq_handler(struct cm_work *work)
int ret; int ret;
dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad; dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
dreq_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_DREQ_REMOTE_COMM_ID, dreq_msg)),
cpu_to_be32(IBA_GET(CM_DREQ_LOCAL_COMM_ID, dreq_msg)));
if (!cm_id_priv) { if (!cm_id_priv) {
atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES].
counter[CM_DREQ_COUNTER]); counter[CM_DREQ_COUNTER]);
cm_issue_drep(work->port, work->mad_recv_wc); cm_issue_drep(work->port, work->mad_recv_wc);
pr_debug("%s: no cm_id_priv, local_comm_id %d, remote_comm_id %d\n", pr_debug(
__func__, be32_to_cpu(dreq_msg->local_comm_id), "%s: no cm_id_priv, local_comm_id %d, remote_comm_id %d\n",
be32_to_cpu(dreq_msg->remote_comm_id)); __func__, IBA_GET(CM_DREQ_LOCAL_COMM_ID, dreq_msg),
IBA_GET(CM_DREQ_REMOTE_COMM_ID, dreq_msg));
return -EINVAL; return -EINVAL;
} }
...@@ -2672,8 +2753,9 @@ static int cm_drep_handler(struct cm_work *work) ...@@ -2672,8 +2753,9 @@ static int cm_drep_handler(struct cm_work *work)
int ret; int ret;
drep_msg = (struct cm_drep_msg *)work->mad_recv_wc->recv_buf.mad; drep_msg = (struct cm_drep_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(drep_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
drep_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_DREP_REMOTE_COMM_ID, drep_msg)),
cpu_to_be32(IBA_GET(CM_DREP_LOCAL_COMM_ID, drep_msg)));
if (!cm_id_priv) if (!cm_id_priv)
return -EINVAL; return -EINVAL;
...@@ -2775,7 +2857,7 @@ static void cm_format_rej_event(struct cm_work *work) ...@@ -2775,7 +2857,7 @@ static void cm_format_rej_event(struct cm_work *work)
param = &work->cm_event.param.rej_rcvd; param = &work->cm_event.param.rej_rcvd;
param->ari = rej_msg->ari; param->ari = rej_msg->ari;
param->ari_length = IBA_GET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg); param->ari_length = IBA_GET(CM_REJ_REJECTED_INFO_LENGTH, rej_msg);
param->reason = __be16_to_cpu(rej_msg->reason); param->reason = IBA_GET(CM_REJ_REASON, rej_msg);
work->cm_event.private_data = &rej_msg->private_data; work->cm_event.private_data = &rej_msg->private_data;
} }
...@@ -2785,9 +2867,9 @@ static struct cm_id_private * cm_acquire_rejected_id(struct cm_rej_msg *rej_msg) ...@@ -2785,9 +2867,9 @@ static struct cm_id_private * cm_acquire_rejected_id(struct cm_rej_msg *rej_msg)
struct cm_id_private *cm_id_priv; struct cm_id_private *cm_id_priv;
__be32 remote_id; __be32 remote_id;
remote_id = rej_msg->local_comm_id; remote_id = cpu_to_be32(IBA_GET(CM_REJ_LOCAL_COMM_ID, rej_msg));
if (__be16_to_cpu(rej_msg->reason) == IB_CM_REJ_TIMEOUT) { if (IBA_GET(CM_REJ_REASON, rej_msg) == IB_CM_REJ_TIMEOUT) {
spin_lock_irq(&cm.lock); spin_lock_irq(&cm.lock);
timewait_info = cm_find_remote_id( *((__be64 *) rej_msg->ari), timewait_info = cm_find_remote_id( *((__be64 *) rej_msg->ari),
remote_id); remote_id);
...@@ -2800,9 +2882,13 @@ static struct cm_id_private * cm_acquire_rejected_id(struct cm_rej_msg *rej_msg) ...@@ -2800,9 +2882,13 @@ static struct cm_id_private * cm_acquire_rejected_id(struct cm_rej_msg *rej_msg)
spin_unlock_irq(&cm.lock); spin_unlock_irq(&cm.lock);
} else if (IBA_GET(CM_REJ_MESSAGE_REJECTED, rej_msg) == } else if (IBA_GET(CM_REJ_MESSAGE_REJECTED, rej_msg) ==
CM_MSG_RESPONSE_REQ) CM_MSG_RESPONSE_REQ)
cm_id_priv = cm_acquire_id(rej_msg->remote_comm_id, 0); cm_id_priv = cm_acquire_id(
cpu_to_be32(IBA_GET(CM_REJ_REMOTE_COMM_ID, rej_msg)),
0);
else else
cm_id_priv = cm_acquire_id(rej_msg->remote_comm_id, remote_id); cm_id_priv = cm_acquire_id(
cpu_to_be32(IBA_GET(CM_REJ_REMOTE_COMM_ID, rej_msg)),
remote_id);
return cm_id_priv; return cm_id_priv;
} }
...@@ -2830,7 +2916,7 @@ static int cm_rej_handler(struct cm_work *work) ...@@ -2830,7 +2916,7 @@ static int cm_rej_handler(struct cm_work *work)
/* fall through */ /* fall through */
case IB_CM_REQ_RCVD: case IB_CM_REQ_RCVD:
case IB_CM_MRA_REQ_SENT: case IB_CM_MRA_REQ_SENT:
if (__be16_to_cpu(rej_msg->reason) == IB_CM_REJ_STALE_CONN) if (IBA_GET(CM_REJ_REASON, rej_msg) == IB_CM_REJ_STALE_CONN)
cm_enter_timewait(cm_id_priv); cm_enter_timewait(cm_id_priv);
else else
cm_reset_to_idle(cm_id_priv); cm_reset_to_idle(cm_id_priv);
...@@ -2962,11 +3048,14 @@ static struct cm_id_private * cm_acquire_mraed_id(struct cm_mra_msg *mra_msg) ...@@ -2962,11 +3048,14 @@ static struct cm_id_private * cm_acquire_mraed_id(struct cm_mra_msg *mra_msg)
{ {
switch (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg)) { switch (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg)) {
case CM_MSG_RESPONSE_REQ: case CM_MSG_RESPONSE_REQ:
return cm_acquire_id(mra_msg->remote_comm_id, 0); return cm_acquire_id(
cpu_to_be32(IBA_GET(CM_MRA_REMOTE_COMM_ID, mra_msg)),
0);
case CM_MSG_RESPONSE_REP: case CM_MSG_RESPONSE_REP:
case CM_MSG_RESPONSE_OTHER: case CM_MSG_RESPONSE_OTHER:
return cm_acquire_id(mra_msg->remote_comm_id, return cm_acquire_id(
mra_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_MRA_REMOTE_COMM_ID, mra_msg)),
cpu_to_be32(IBA_GET(CM_MRA_LOCAL_COMM_ID, mra_msg)));
default: default:
return NULL; return NULL;
} }
...@@ -3057,8 +3146,10 @@ static void cm_format_path_lid_from_lap(struct cm_lap_msg *lap_msg, ...@@ -3057,8 +3146,10 @@ static void cm_format_path_lid_from_lap(struct cm_lap_msg *lap_msg,
u32 lid; u32 lid;
if (path->rec_type != SA_PATH_REC_TYPE_OPA) { if (path->rec_type != SA_PATH_REC_TYPE_OPA) {
sa_path_set_dlid(path, ntohs(lap_msg->alt_local_lid)); sa_path_set_dlid(path, IBA_GET(CM_LAP_ALTERNATE_LOCAL_PORT_LID,
sa_path_set_slid(path, ntohs(lap_msg->alt_remote_lid)); lap_msg));
sa_path_set_slid(path, IBA_GET(CM_LAP_ALTERNATE_REMOTE_PORT_LID,
lap_msg));
} else { } else {
lid = opa_get_lid_from_gid(&lap_msg->alt_local_gid); lid = opa_get_lid_from_gid(&lap_msg->alt_local_gid);
sa_path_set_dlid(path, lid); sa_path_set_dlid(path, lid);
...@@ -3076,7 +3167,7 @@ static void cm_format_path_from_lap(struct cm_id_private *cm_id_priv, ...@@ -3076,7 +3167,7 @@ static void cm_format_path_from_lap(struct cm_id_private *cm_id_priv,
path->sgid = lap_msg->alt_remote_gid; path->sgid = lap_msg->alt_remote_gid;
path->flow_label = path->flow_label =
cpu_to_be32(IBA_GET(CM_LAP_ALTERNATE_FLOW_LABEL, lap_msg)); cpu_to_be32(IBA_GET(CM_LAP_ALTERNATE_FLOW_LABEL, lap_msg));
path->hop_limit = lap_msg->alt_hop_limit; path->hop_limit = IBA_GET(CM_LAP_ALTERNATE_HOP_LIMIT, lap_msg);
path->traffic_class = IBA_GET(CM_LAP_ALTERNATE_TRAFFIC_CLASS, lap_msg); path->traffic_class = IBA_GET(CM_LAP_ALTERNATE_TRAFFIC_CLASS, lap_msg);
path->reversible = 1; path->reversible = 1;
path->pkey = cm_id_priv->pkey; path->pkey = cm_id_priv->pkey;
...@@ -3109,8 +3200,9 @@ static int cm_lap_handler(struct cm_work *work) ...@@ -3109,8 +3200,9 @@ static int cm_lap_handler(struct cm_work *work)
/* todo: verify LAP request and send reject APR if invalid. */ /* todo: verify LAP request and send reject APR if invalid. */
lap_msg = (struct cm_lap_msg *)work->mad_recv_wc->recv_buf.mad; lap_msg = (struct cm_lap_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(lap_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
lap_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_LAP_REMOTE_COMM_ID, lap_msg)),
cpu_to_be32(IBA_GET(CM_LAP_LOCAL_COMM_ID, lap_msg)));
if (!cm_id_priv) if (!cm_id_priv)
return -EINVAL; return -EINVAL;
...@@ -3201,14 +3293,17 @@ static int cm_apr_handler(struct cm_work *work) ...@@ -3201,14 +3293,17 @@ static int cm_apr_handler(struct cm_work *work)
return -EINVAL; return -EINVAL;
apr_msg = (struct cm_apr_msg *)work->mad_recv_wc->recv_buf.mad; apr_msg = (struct cm_apr_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(apr_msg->remote_comm_id, cm_id_priv = cm_acquire_id(
apr_msg->local_comm_id); cpu_to_be32(IBA_GET(CM_APR_REMOTE_COMM_ID, apr_msg)),
cpu_to_be32(IBA_GET(CM_APR_LOCAL_COMM_ID, apr_msg)));
if (!cm_id_priv) if (!cm_id_priv)
return -EINVAL; /* Unmatched reply. */ return -EINVAL; /* Unmatched reply. */
work->cm_event.param.apr_rcvd.ap_status = apr_msg->ap_status; work->cm_event.param.apr_rcvd.ap_status =
IBA_GET(CM_APR_AR_STATUS, apr_msg);
work->cm_event.param.apr_rcvd.apr_info = &apr_msg->info; work->cm_event.param.apr_rcvd.apr_info = &apr_msg->info;
work->cm_event.param.apr_rcvd.info_len = apr_msg->info_length; work->cm_event.param.apr_rcvd.info_len =
IBA_GET(CM_APR_ADDITIONAL_INFORMATION_LENGTH, apr_msg);
work->cm_event.private_data = &apr_msg->private_data; work->cm_event.private_data = &apr_msg->private_data;
spin_lock_irq(&cm_id_priv->lock); spin_lock_irq(&cm_id_priv->lock);
...@@ -3281,9 +3376,12 @@ static void cm_format_sidr_req(struct cm_sidr_req_msg *sidr_req_msg, ...@@ -3281,9 +3376,12 @@ static void cm_format_sidr_req(struct cm_sidr_req_msg *sidr_req_msg,
{ {
cm_format_mad_hdr(&sidr_req_msg->hdr, CM_SIDR_REQ_ATTR_ID, cm_format_mad_hdr(&sidr_req_msg->hdr, CM_SIDR_REQ_ATTR_ID,
cm_form_tid(cm_id_priv)); cm_form_tid(cm_id_priv));
sidr_req_msg->request_id = cm_id_priv->id.local_id; IBA_SET(CM_SIDR_REQ_REQUESTID, sidr_req_msg,
sidr_req_msg->pkey = param->path->pkey; be32_to_cpu(cm_id_priv->id.local_id));
sidr_req_msg->service_id = param->service_id; IBA_SET(CM_SIDR_REQ_PARTITION_KEY, sidr_req_msg,
be16_to_cpu(param->path->pkey));
IBA_SET(CM_SIDR_REQ_SERVICEID, sidr_req_msg,
be64_to_cpu(param->service_id));
if (param->private_data && param->private_data_len) if (param->private_data && param->private_data_len)
memcpy(sidr_req_msg->private_data, param->private_data, memcpy(sidr_req_msg->private_data, param->private_data,
...@@ -3351,9 +3449,10 @@ static void cm_format_sidr_req_event(struct cm_work *work, ...@@ -3351,9 +3449,10 @@ static void cm_format_sidr_req_event(struct cm_work *work,
sidr_req_msg = (struct cm_sidr_req_msg *) sidr_req_msg = (struct cm_sidr_req_msg *)
work->mad_recv_wc->recv_buf.mad; work->mad_recv_wc->recv_buf.mad;
param = &work->cm_event.param.sidr_req_rcvd; param = &work->cm_event.param.sidr_req_rcvd;
param->pkey = __be16_to_cpu(sidr_req_msg->pkey); param->pkey = IBA_GET(CM_SIDR_REQ_PARTITION_KEY, sidr_req_msg);
param->listen_id = listen_id; param->listen_id = listen_id;
param->service_id = sidr_req_msg->service_id; param->service_id =
cpu_to_be64(IBA_GET(CM_SIDR_REQ_SERVICEID, sidr_req_msg));
param->bth_pkey = cm_get_bth_pkey(work); param->bth_pkey = cm_get_bth_pkey(work);
param->port = work->port->port_num; param->port = work->port->port_num;
param->sgid_attr = rx_cm_id->av.ah_attr.grh.sgid_attr; param->sgid_attr = rx_cm_id->av.ah_attr.grh.sgid_attr;
...@@ -3385,7 +3484,8 @@ static int cm_sidr_req_handler(struct cm_work *work) ...@@ -3385,7 +3484,8 @@ static int cm_sidr_req_handler(struct cm_work *work)
if (ret) if (ret)
goto out; goto out;
cm_id_priv->id.remote_id = sidr_req_msg->request_id; cm_id_priv->id.remote_id =
cpu_to_be32(IBA_GET(CM_SIDR_REQ_REQUESTID, sidr_req_msg));
cm_id_priv->tid = sidr_req_msg->hdr.tid; cm_id_priv->tid = sidr_req_msg->hdr.tid;
atomic_inc(&cm_id_priv->work_count); atomic_inc(&cm_id_priv->work_count);
...@@ -3398,8 +3498,9 @@ static int cm_sidr_req_handler(struct cm_work *work) ...@@ -3398,8 +3498,9 @@ static int cm_sidr_req_handler(struct cm_work *work)
goto out; /* Duplicate message. */ goto out; /* Duplicate message. */
} }
cm_id_priv->id.state = IB_CM_SIDR_REQ_RCVD; cm_id_priv->id.state = IB_CM_SIDR_REQ_RCVD;
cur_cm_id_priv = cm_find_listen(cm_id->device, cur_cm_id_priv = cm_find_listen(
sidr_req_msg->service_id); cm_id->device,
cpu_to_be64(IBA_GET(CM_SIDR_REQ_SERVICEID, sidr_req_msg)));
if (!cur_cm_id_priv) { if (!cur_cm_id_priv) {
spin_unlock_irq(&cm.lock); spin_unlock_irq(&cm.lock);
cm_reject_sidr_req(cm_id_priv, IB_SIDR_UNSUPPORTED); cm_reject_sidr_req(cm_id_priv, IB_SIDR_UNSUPPORTED);
...@@ -3411,7 +3512,8 @@ static int cm_sidr_req_handler(struct cm_work *work) ...@@ -3411,7 +3512,8 @@ static int cm_sidr_req_handler(struct cm_work *work)
cm_id_priv->id.cm_handler = cur_cm_id_priv->id.cm_handler; cm_id_priv->id.cm_handler = cur_cm_id_priv->id.cm_handler;
cm_id_priv->id.context = cur_cm_id_priv->id.context; cm_id_priv->id.context = cur_cm_id_priv->id.context;
cm_id_priv->id.service_id = sidr_req_msg->service_id; cm_id_priv->id.service_id =
cpu_to_be64(IBA_GET(CM_SIDR_REQ_SERVICEID, sidr_req_msg));
cm_id_priv->id.service_mask = ~cpu_to_be64(0); cm_id_priv->id.service_mask = ~cpu_to_be64(0);
cm_format_sidr_req_event(work, cm_id_priv, &cur_cm_id_priv->id); cm_format_sidr_req_event(work, cm_id_priv, &cur_cm_id_priv->id);
...@@ -3429,11 +3531,13 @@ static void cm_format_sidr_rep(struct cm_sidr_rep_msg *sidr_rep_msg, ...@@ -3429,11 +3531,13 @@ static void cm_format_sidr_rep(struct cm_sidr_rep_msg *sidr_rep_msg,
{ {
cm_format_mad_hdr(&sidr_rep_msg->hdr, CM_SIDR_REP_ATTR_ID, cm_format_mad_hdr(&sidr_rep_msg->hdr, CM_SIDR_REP_ATTR_ID,
cm_id_priv->tid); cm_id_priv->tid);
sidr_rep_msg->request_id = cm_id_priv->id.remote_id; IBA_SET(CM_SIDR_REP_REQUESTID, sidr_rep_msg,
sidr_rep_msg->status = param->status; be32_to_cpu(cm_id_priv->id.remote_id));
IBA_SET(CM_SIDR_REP_STATUS, sidr_rep_msg, param->status);
IBA_SET(CM_SIDR_REP_QPN, sidr_rep_msg, param->qp_num); IBA_SET(CM_SIDR_REP_QPN, sidr_rep_msg, param->qp_num);
sidr_rep_msg->service_id = cm_id_priv->id.service_id; IBA_SET(CM_SIDR_REP_SERVICEID, sidr_rep_msg,
sidr_rep_msg->qkey = cpu_to_be32(param->qkey); be64_to_cpu(cm_id_priv->id.service_id));
IBA_SET(CM_SIDR_REP_Q_KEY, sidr_rep_msg, param->qkey);
if (param->info && param->info_length) if (param->info && param->info_length)
memcpy(sidr_rep_msg->info, param->info, param->info_length); memcpy(sidr_rep_msg->info, param->info, param->info_length);
...@@ -3500,11 +3604,12 @@ static void cm_format_sidr_rep_event(struct cm_work *work, ...@@ -3500,11 +3604,12 @@ static void cm_format_sidr_rep_event(struct cm_work *work,
sidr_rep_msg = (struct cm_sidr_rep_msg *) sidr_rep_msg = (struct cm_sidr_rep_msg *)
work->mad_recv_wc->recv_buf.mad; work->mad_recv_wc->recv_buf.mad;
param = &work->cm_event.param.sidr_rep_rcvd; param = &work->cm_event.param.sidr_rep_rcvd;
param->status = sidr_rep_msg->status; param->status = IBA_GET(CM_SIDR_REP_STATUS, sidr_rep_msg);
param->qkey = be32_to_cpu(sidr_rep_msg->qkey); param->qkey = IBA_GET(CM_SIDR_REP_Q_KEY, sidr_rep_msg);
param->qpn = IBA_GET(CM_SIDR_REP_QPN, sidr_rep_msg); param->qpn = IBA_GET(CM_SIDR_REP_QPN, sidr_rep_msg);
param->info = &sidr_rep_msg->info; param->info = &sidr_rep_msg->info;
param->info_len = sidr_rep_msg->info_length; param->info_len = IBA_GET(CM_SIDR_REP_ADDITIONAL_INFORMATION_LENGTH,
sidr_rep_msg);
param->sgid_attr = cm_id_priv->av.ah_attr.grh.sgid_attr; param->sgid_attr = cm_id_priv->av.ah_attr.grh.sgid_attr;
work->cm_event.private_data = &sidr_rep_msg->private_data; work->cm_event.private_data = &sidr_rep_msg->private_data;
} }
...@@ -3516,7 +3621,8 @@ static int cm_sidr_rep_handler(struct cm_work *work) ...@@ -3516,7 +3621,8 @@ static int cm_sidr_rep_handler(struct cm_work *work)
sidr_rep_msg = (struct cm_sidr_rep_msg *) sidr_rep_msg = (struct cm_sidr_rep_msg *)
work->mad_recv_wc->recv_buf.mad; work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(sidr_rep_msg->request_id, 0); cm_id_priv = cm_acquire_id(
cpu_to_be32(IBA_GET(CM_SIDR_REP_REQUESTID, sidr_rep_msg)), 0);
if (!cm_id_priv) if (!cm_id_priv)
return -EINVAL; /* Unmatched reply. */ return -EINVAL; /* Unmatched reply. */
......
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