struct mlx4_ib_qp *qp = to_mqp(ibqp);\r
struct mlx4_qp_context context;\r
int mlx4_state;\r
- int err;\r
+ int err = 0;\r
\r
UNUSED_PARAM(qp_attr_mask);\r
\r
if (mlx4_is_barred(dev->dev))\r
return -EFAULT;\r
+\r
+ mutex_lock(&qp->mutex);\r
\r
if (qp->state == XIB_QPS_RESET) {\r
qp_attr->qp_state = XIB_QPS_RESET;\r
}\r
\r
err = mlx4_qp_query(dev->dev, &qp->mqp, &context);\r
- if (err)\r
- return -EINVAL;\r
+ if (err) {\r
+ err = -EINVAL;\r
+ goto out;\r
+ }\r
\r
mlx4_state = be32_to_cpu(context.flags) >> 28;\r
\r
\r
qp_init_attr->cap = qp_attr->cap;\r
\r
- return 0;\r
+out:\r
+ mutex_unlock(&qp->mutex);\r
+ return err;\r
}\r
\r