[mlx4] Fix error path on create qp.
[mirror/winof/.git] / hw / mlx4 / kernel / bus / ib / qp.c
index d7528c4..47378d2 100644 (file)
@@ -326,6 +326,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
                            struct ib_udata *udata, u32 sqpn, struct mlx4_ib_qp *qp)\r
 {\r
        int err;\r
+       BOOLEAN range_allocated = FALSE;\r
 \r
        mutex_init(&qp->mutex);\r
        spin_lock_init(&qp->sq.lock);\r
@@ -429,19 +430,17 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
                }\r
        }\r
 \r
-       if (!sqpn)\r
-               err = mlx4_qp_reserve_range(dev->dev, 1, 1, &sqpn);\r
-       if (err)\r
-               goto err_wrid;\r
+       if (!sqpn) {\r
+                       err = mlx4_qp_reserve_range(dev->dev, 1, 1, &sqpn);\r
+               if (err)\r
+                       goto err_wrid;\r
+               range_allocated = TRUE;\r
+               \r
+       }\r
 \r
        err = mlx4_qp_alloc(dev->dev, sqpn, &qp->mqp);\r
        if (err)\r
-               goto err_wrid;\r
-\r
-       if (err) {\r
-               mlx4_qp_release_range(dev->dev, sqpn, 1);\r
-               goto err_wrid;\r
-       }\r
+               goto err_range;\r
 \r
        /*\r
         * Hardware wants QPN written in big-endian order (after\r
@@ -459,6 +458,10 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
 \r
        return 0;\r
 \r
+err_range:\r
+       if (range_allocated)\r
+               mlx4_qp_release_range(dev->dev, sqpn, 1);\r
+\r
 err_wrid:\r
        if (pd->p_uctx) {\r
                if (!init_attr->srq)\r