[MLX4] bug fix: prevent simultaneous issuing of modify_qp and query_qp commands ...
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 31 May 2009 08:33:42 +0000 (08:33 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 31 May 2009 08:33:42 +0000 (08:33 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2223 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

hw/mlx4/kernel/bus/ib/qp.c

index bf29a89..4198f47 100644 (file)
@@ -1791,12 +1791,14 @@ int mlx4_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
        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
@@ -1804,8 +1806,10 @@ int mlx4_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
        }\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
@@ -1868,6 +1872,8 @@ done:
 \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