|
@@ -1573,7 +1573,7 @@ static void cm_format_req_event(struct cm_work *work,
|
|
|
param->bth_pkey = cm_get_bth_pkey(work);
|
|
|
param->port = cm_id_priv->av.port->port_num;
|
|
|
param->primary_path = &work->path[0];
|
|
|
- if (req_msg->alt_local_lid)
|
|
|
+ if (cm_req_has_alt_path(req_msg))
|
|
|
param->alternate_path = &work->path[1];
|
|
|
else
|
|
|
param->alternate_path = NULL;
|
|
@@ -1854,7 +1854,8 @@ static int cm_req_handler(struct cm_work *work)
|
|
|
cm_process_routed_req(req_msg, work->mad_recv_wc->wc);
|
|
|
|
|
|
memset(&work->path[0], 0, sizeof(work->path[0]));
|
|
|
- memset(&work->path[1], 0, sizeof(work->path[1]));
|
|
|
+ if (cm_req_has_alt_path(req_msg))
|
|
|
+ memset(&work->path[1], 0, sizeof(work->path[1]));
|
|
|
grh = rdma_ah_read_grh(&cm_id_priv->av.ah_attr);
|
|
|
ret = ib_get_cached_gid(work->port->cm_dev->ib_device,
|
|
|
work->port->port_num,
|
|
@@ -3816,14 +3817,16 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
|
|
|
struct cm_port *port = mad_agent->context;
|
|
|
struct cm_work *work;
|
|
|
enum ib_cm_event_type event;
|
|
|
+ bool alt_path = false;
|
|
|
u16 attr_id;
|
|
|
int paths = 0;
|
|
|
int going_down = 0;
|
|
|
|
|
|
switch (mad_recv_wc->recv_buf.mad->mad_hdr.attr_id) {
|
|
|
case CM_REQ_ATTR_ID:
|
|
|
- paths = 1 + (((struct cm_req_msg *) mad_recv_wc->recv_buf.mad)->
|
|
|
- alt_local_lid != 0);
|
|
|
+ alt_path = cm_req_has_alt_path((struct cm_req_msg *)
|
|
|
+ mad_recv_wc->recv_buf.mad);
|
|
|
+ paths = 1 + (alt_path != 0);
|
|
|
event = IB_CM_REQ_RECEIVED;
|
|
|
break;
|
|
|
case CM_MRA_ATTR_ID:
|