aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/mlx4/qp.c
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@dev.mellanox.co.il>2007-07-17 21:37:38 -0400
committerRoland Dreier <rolandd@cisco.com>2007-07-17 21:37:38 -0400
commit1c27cb71aa7d86df0271caadfcc196a0518f5e33 (patch)
tree57f80f30c38fe8040944a6bad3c214db0cbe2f04 /drivers/infiniband/hw/mlx4/qp.c
parent586bb586ae59c473393c09291e86042d263c3ddd (diff)
IB/mlx4: Fix port returned from query QP for QPs in INIT state
When a QP is in the INIT state, the sched_queue field hasn't been given to the firmware yet, so the firmware cannot return the value when the QP is queried. To handle this, use the port number that is saved in the driver's QP data structure. Found by Dotan Barak and Yaron Gepstein of Mellanox. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/mlx4/qp.c')
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 2d00b4ee80c0..d10bd888e7c3 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1560,7 +1560,10 @@ int mlx4_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
1560 } 1560 }
1561 1561
1562 qp_attr->pkey_index = context.pri_path.pkey_index & 0x7f; 1562 qp_attr->pkey_index = context.pri_path.pkey_index & 0x7f;
1563 qp_attr->port_num = context.pri_path.sched_queue & 0x40 ? 2 : 1; 1563 if (qp_attr->qp_state == IB_QPS_INIT)
1564 qp_attr->port_num = qp->port;
1565 else
1566 qp_attr->port_num = context.pri_path.sched_queue & 0x40 ? 2 : 1;
1564 1567
1565 /* qp_attr->en_sqd_async_notify is only applicable in modify qp */ 1568 /* qp_attr->en_sqd_async_notify is only applicable in modify qp */
1566 qp_attr->sq_draining = mlx4_state == MLX4_QP_STATE_SQ_DRAINING; 1569 qp_attr->sq_draining = mlx4_state == MLX4_QP_STATE_SQ_DRAINING;