diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx4/cm.c')
-rw-r--r-- | drivers/infiniband/hw/mlx4/cm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c index 1e6c526450d9..fedaf8260105 100644 --- a/drivers/infiniband/hw/mlx4/cm.c +++ b/drivers/infiniband/hw/mlx4/cm.c | |||
@@ -323,6 +323,9 @@ int mlx4_ib_multiplex_cm_handler(struct ib_device *ibdev, int port, int slave_id | |||
323 | mad->mad_hdr.attr_id == CM_REP_ATTR_ID || | 323 | mad->mad_hdr.attr_id == CM_REP_ATTR_ID || |
324 | mad->mad_hdr.attr_id == CM_SIDR_REQ_ATTR_ID) { | 324 | mad->mad_hdr.attr_id == CM_SIDR_REQ_ATTR_ID) { |
325 | sl_cm_id = get_local_comm_id(mad); | 325 | sl_cm_id = get_local_comm_id(mad); |
326 | id = id_map_get(ibdev, &pv_cm_id, slave_id, sl_cm_id); | ||
327 | if (id) | ||
328 | goto cont; | ||
326 | id = id_map_alloc(ibdev, slave_id, sl_cm_id); | 329 | id = id_map_alloc(ibdev, slave_id, sl_cm_id); |
327 | if (IS_ERR(id)) { | 330 | if (IS_ERR(id)) { |
328 | mlx4_ib_warn(ibdev, "%s: id{slave: %d, sl_cm_id: 0x%x} Failed to id_map_alloc\n", | 331 | mlx4_ib_warn(ibdev, "%s: id{slave: %d, sl_cm_id: 0x%x} Failed to id_map_alloc\n", |
@@ -343,6 +346,7 @@ int mlx4_ib_multiplex_cm_handler(struct ib_device *ibdev, int port, int slave_id | |||
343 | return -EINVAL; | 346 | return -EINVAL; |
344 | } | 347 | } |
345 | 348 | ||
349 | cont: | ||
346 | set_local_comm_id(mad, id->pv_cm_id); | 350 | set_local_comm_id(mad, id->pv_cm_id); |
347 | 351 | ||
348 | if (mad->mad_hdr.attr_id == CM_DREQ_ATTR_ID) | 352 | if (mad->mad_hdr.attr_id == CM_DREQ_ATTR_ID) |