RDMA/drivers: Remove udata check from special QP
authorLeon Romanovsky <leonro@nvidia.com>
Sat, 26 Sep 2020 10:24:48 +0000 (13:24 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 29 Sep 2020 16:11:06 +0000 (13:11 -0300)
GSI QP can't be created from the user space, hence the udata check is
always false (udata == NULL). Remove that check and simplify the flow.

Link: https://lore.kernel.org/r/20200926102450.2966017-9-leon@kernel.org
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_qp.c
drivers/infiniband/hw/mlx4/qp.c
drivers/infiniband/hw/mlx5/qp.c
drivers/infiniband/hw/mthca/mthca_provider.c
drivers/infiniband/hw/qedr/verbs.c
drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c

index 7c3b54881d466970250b044a40ac9c9f703f36aa..6e06f42be5ebb4a83d57cc935b049ee15d920b71 100644 (file)
@@ -1015,53 +1015,32 @@ struct ib_qp *hns_roce_create_qp(struct ib_pd *pd,
        int ret;
 
        switch (init_attr->qp_type) {
-       case IB_QPT_RC: {
-               hr_qp = kzalloc(sizeof(*hr_qp), GFP_KERNEL);
-               if (!hr_qp)
-                       return ERR_PTR(-ENOMEM);
-
-               ret = hns_roce_create_qp_common(hr_dev, pd, init_attr, udata,
-                                               hr_qp);
-               if (ret) {
-                       ibdev_err(ibdev, "Create QP 0x%06lx failed(%d)\n",
-                                 hr_qp->qpn, ret);
-                       kfree(hr_qp);
-                       return ERR_PTR(ret);
-               }
-
+       case IB_QPT_RC:
+       case IB_QPT_GSI:
                break;
+       default:
+               ibdev_err(ibdev, "not support QP type %d\n",
+                         init_attr->qp_type);
+               return ERR_PTR(-EOPNOTSUPP);
        }
-       case IB_QPT_GSI: {
-               /* Userspace is not allowed to create special QPs: */
-               if (udata) {
-                       ibdev_err(ibdev, "not support usr space GSI\n");
-                       return ERR_PTR(-EINVAL);
-               }
 
-               hr_qp = kzalloc(sizeof(*hr_qp), GFP_KERNEL);
-               if (!hr_qp)
-                       return ERR_PTR(-ENOMEM);
+       hr_qp = kzalloc(sizeof(*hr_qp), GFP_KERNEL);
+       if (!hr_qp)
+               return ERR_PTR(-ENOMEM);
 
+       if (init_attr->qp_type == IB_QPT_GSI) {
                hr_qp->port = init_attr->port_num - 1;
                hr_qp->phy_port = hr_dev->iboe.phy_port[hr_qp->port];
-
-               ret = hns_roce_create_qp_common(hr_dev, pd, init_attr, udata,
-                                               hr_qp);
-               if (ret) {
-                       ibdev_err(ibdev, "Create GSI QP failed!\n");
-                       kfree(hr_qp);
-                       return ERR_PTR(ret);
-               }
-
-               break;
-       }
-       default:{
-               ibdev_err(ibdev, "not support QP type %d\n",
-                         init_attr->qp_type);
-               return ERR_PTR(-EOPNOTSUPP);
-       }
        }
 
+       ret = hns_roce_create_qp_common(hr_dev, pd, init_attr, udata, hr_qp);
+       if (ret) {
+               ibdev_err(ibdev, "Create QP type 0x%x failed(%d)\n",
+                         init_attr->qp_type, ret);
+               ibdev_err(ibdev, "Create GSI QP failed!\n");
+               kfree(hr_qp);
+               return ERR_PTR(ret);
+       }
        return &hr_qp->ibqp;
 }
 
index f810e4df3fbfea336358b1f6881875f618041850..5cb8e602294ca9ad1e89000991c307d84b3984a1 100644 (file)
@@ -1544,9 +1544,6 @@ static int _mlx4_ib_create_qp(struct ib_pd *pd, struct mlx4_ib_qp *qp,
        {
                int sqpn;
 
-               /* Userspace is not allowed to create special QPs: */
-               if (udata)
-                       return -EINVAL;
                if (init_attr->create_flags & MLX4_IB_QP_CREATE_ROCE_V2_GSI) {
                        int res = mlx4_qp_reserve_range(to_mdev(pd->device)->dev,
                                                        1, 1, &sqpn, 0,
index a251aa9da20195e0f550a7212e59c646eaa13b3d..600e056798c0a1230ef152c550e38a92d8d8b691 100644 (file)
@@ -2511,18 +2511,6 @@ static int check_valid_flow(struct mlx5_ib_dev *dev, struct ib_pd *pd,
                return -EINVAL;
        }
 
-       switch (attr->qp_type) {
-       case IB_QPT_SMI:
-       case MLX5_IB_QPT_HW_GSI:
-       case MLX5_IB_QPT_REG_UMR:
-       case IB_QPT_GSI:
-               mlx5_ib_dbg(dev, "Kernel doesn't support QP type %d\n",
-                           attr->qp_type);
-               return -EINVAL;
-       default:
-               break;
-       }
-
        /*
         * We don't need to see this warning, it means that kernel code
         * missing ib_pd. Placed here to catch developer's mistakes.
index 82ee252fe5aaf44014422983387bd807bd8c5e62..5dbddf8faf995def8712cbdee04180530711955e 100644 (file)
@@ -535,10 +535,6 @@ static struct ib_qp *mthca_create_qp(struct ib_pd *pd,
        case IB_QPT_SMI:
        case IB_QPT_GSI:
        {
-               /* Don't allow userspace to create special QPs */
-               if (udata)
-                       return ERR_PTR(-EINVAL);
-
                qp = kzalloc(sizeof(struct mthca_sqp), GFP_KERNEL);
                if (!qp)
                        return ERR_PTR(-ENOMEM);
index da42cc70e372bfc9d79b5087c9fe5738f61e5eea..23559f1fe96e1c7c3b6ffc135c386f588d22d704 100644 (file)
@@ -1235,14 +1235,6 @@ static int qedr_check_qp_attrs(struct ib_pd *ibpd, struct qedr_dev *dev,
                return -EINVAL;
        }
 
-       /* Unprivileged user space cannot create special QP */
-       if (udata && attrs->qp_type == IB_QPT_GSI) {
-               DP_ERR(dev,
-                      "create qp: userspace can't create special QPs of type=0x%x\n",
-                      attrs->qp_type);
-               return -EINVAL;
-       }
-
        /* verify consumer QPs are not trying to use GSI QP's CQ.
         * TGT QP isn't associated with RQ/SQ
         */
index 8a385acf6f0c42e9486faae94c73c76225ad449f..428256c5506571146592e004f114fee42e1335c1 100644 (file)
@@ -232,8 +232,7 @@ struct ib_qp *pvrdma_create_qp(struct ib_pd *pd,
        switch (init_attr->qp_type) {
        case IB_QPT_GSI:
                if (init_attr->port_num == 0 ||
-                   init_attr->port_num > pd->device->phys_port_cnt ||
-                   udata) {
+                   init_attr->port_num > pd->device->phys_port_cnt) {
                        dev_warn(&dev->pdev->dev, "invalid queuepair attrs\n");
                        ret = -EINVAL;
                        goto err_qp;