RDMA: Pass entire uverbs attr bundle to create cq function
authorAkiva Goldberger <agoldberger@nvidia.com>
Thu, 27 Jun 2024 18:23:49 +0000 (21:23 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 27 Jun 2024 19:28:21 +0000 (16:28 -0300)
Changes the create_cq verb signature by sending the entire uverbs attr
bundle as a parameter. This allows drivers to send driver specific attrs
through ioctl for the create_cq verb and access them in their driver
specific code.

Also adds a new enum value for driver specific ioctl attributes for
methods already supporting UHW.

Link: https://lore.kernel.org/r/ed147343987c0d43fd391c1b2f85e2f425747387.1719512393.git.leon@kernel.org
Signed-off-by: Akiva Goldberger <agoldberger@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
35 files changed:
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_std_types_cq.c
drivers/infiniband/hw/bnxt_re/ib_verbs.c
drivers/infiniband/hw/bnxt_re/ib_verbs.h
drivers/infiniband/hw/cxgb4/cq.c
drivers/infiniband/hw/cxgb4/iw_cxgb4.h
drivers/infiniband/hw/efa/efa.h
drivers/infiniband/hw/efa/efa_verbs.c
drivers/infiniband/hw/erdma/erdma_verbs.c
drivers/infiniband/hw/erdma/erdma_verbs.h
drivers/infiniband/hw/hns/hns_roce_cq.c
drivers/infiniband/hw/hns/hns_roce_device.h
drivers/infiniband/hw/irdma/verbs.c
drivers/infiniband/hw/mana/cq.c
drivers/infiniband/hw/mana/mana_ib.h
drivers/infiniband/hw/mlx4/cq.c
drivers/infiniband/hw/mlx4/mlx4_ib.h
drivers/infiniband/hw/mlx5/cq.c
drivers/infiniband/hw/mlx5/mlx5_ib.h
drivers/infiniband/hw/mthca/mthca_provider.c
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h
drivers/infiniband/hw/qedr/verbs.c
drivers/infiniband/hw/qedr/verbs.h
drivers/infiniband/hw/usnic/usnic_ib_verbs.c
drivers/infiniband/hw/usnic/usnic_ib_verbs.h
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h
drivers/infiniband/sw/rdmavt/cq.c
drivers/infiniband/sw/rdmavt/cq.h
drivers/infiniband/sw/rxe/rxe_verbs.c
drivers/infiniband/sw/siw/siw_verbs.c
drivers/infiniband/sw/siw/siw_verbs.h
include/rdma/ib_verbs.h
include/uapi/rdma/ib_user_ioctl_cmds.h

index 3d3ee3eca98306184d891801b67bf01b24cf212c..1b3ea71f2c3334668ccee5f7ae53a97e13d392b2 100644 (file)
@@ -1051,7 +1051,7 @@ static int create_cq(struct uverbs_attr_bundle *attrs,
        rdma_restrack_new(&cq->res, RDMA_RESTRACK_CQ);
        rdma_restrack_set_name(&cq->res, NULL);
 
-       ret = ib_dev->ops.create_cq(cq, &attr, &attrs->driver_udata);
+       ret = ib_dev->ops.create_cq(cq, &attr, attrs);
        if (ret)
                goto err_free;
        rdma_restrack_add(&cq->res);
index 370ad7c83f8804be67081141796b0a05385481ff..432054f0a8a498e53ace40f072459b3984756ca0 100644 (file)
@@ -128,7 +128,7 @@ static int UVERBS_HANDLER(UVERBS_METHOD_CQ_CREATE)(
        rdma_restrack_new(&cq->res, RDMA_RESTRACK_CQ);
        rdma_restrack_set_name(&cq->res, NULL);
 
-       ret = ib_dev->ops.create_cq(cq, &attr, &attrs->driver_udata);
+       ret = ib_dev->ops.create_cq(cq, &attr, attrs);
        if (ret)
                goto err_free;
 
index d261b09025ca41783326404ed46dd151053ab8a8..e453ca701e87089f40e7220e964938f43867c349 100644 (file)
@@ -2948,10 +2948,11 @@ int bnxt_re_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata)
 }
 
 int bnxt_re_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata)
+                     struct uverbs_attr_bundle *attrs)
 {
        struct bnxt_re_cq *cq = container_of(ibcq, struct bnxt_re_cq, ib_cq);
        struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibcq->device, ibdev);
+       struct ib_udata *udata = &attrs->driver_udata;
        struct bnxt_re_ucontext *uctx =
                rdma_udata_to_drv_context(udata, struct bnxt_re_ucontext, ib_uctx);
        struct bnxt_qplib_dev_attr *dev_attr = &rdev->dev_attr;
index b267d6d5975f7304da54d5a6b7ba46fed4bb6f9e..e98cb17173385b90797e9e6c474ff218a35f46da 100644 (file)
@@ -221,7 +221,7 @@ int bnxt_re_post_send(struct ib_qp *qp, const struct ib_send_wr *send_wr,
 int bnxt_re_post_recv(struct ib_qp *qp, const struct ib_recv_wr *recv_wr,
                      const struct ib_recv_wr **bad_recv_wr);
 int bnxt_re_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata);
+                     struct uverbs_attr_bundle *attrs);
 int bnxt_re_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata);
 int bnxt_re_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 int bnxt_re_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc);
index 7e2835dcbc1c673e360f6378803b0382532f587f..5111421f947327f8e1218e5a1bf495657817ab18 100644 (file)
@@ -995,8 +995,9 @@ int c4iw_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata)
 }
 
 int c4iw_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                  struct ib_udata *udata)
+                  struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        int vector = attr->comp_vector;
index fb8a0c2488667ebc66a901a9df429e7213345c9a..f838bb6718afcbcb929d21d003b6f285f334f5d6 100644 (file)
@@ -978,7 +978,7 @@ int c4iw_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata);
 int c4iw_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata);
 void c4iw_cq_rem_ref(struct c4iw_cq *chp);
 int c4iw_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                  struct ib_udata *udata);
+                  struct uverbs_attr_bundle *attrs);
 int c4iw_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags);
 int c4iw_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *attr,
                    enum ib_srq_attr_mask srq_attr_mask,
index 926f9ff1f60fda6df21e58f948b5243be7960c16..e580e087e9da0c2a6c73b05ed642599609f1112f 100644 (file)
@@ -161,7 +161,7 @@ int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr,
                  struct ib_udata *udata);
 int efa_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata);
 int efa_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata);
+                 struct uverbs_attr_bundle *attrs);
 struct ib_mr *efa_reg_mr(struct ib_pd *ibpd, u64 start, u64 length,
                         u64 virt_addr, int access_flags,
                         struct ib_udata *udata);
index cd1f735d08a76a94a015061a3645b715b5c401c7..b1e0a1b7c59d3b5b2c40c70d8d86c48060461a01 100644 (file)
@@ -1080,8 +1080,9 @@ static int cq_mmap_entries_setup(struct efa_dev *dev, struct efa_cq *cq,
 }
 
 int efa_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata)
+                 struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct efa_ucontext *ucontext = rdma_udata_to_drv_context(
                udata, struct efa_ucontext, ibucontext);
        struct efa_com_create_cq_params params = {};
index 40c9b6e46b82b33bb48a977a02e6686184790161..d7e1cbf9f5c26bf7d6ca729b81c72dea6d89b46b 100644 (file)
@@ -1628,8 +1628,9 @@ err_out:
 }
 
 int erdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                   struct ib_udata *udata)
+                   struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct erdma_cq *cq = to_ecq(ibcq);
        struct erdma_dev *dev = to_edev(ibcq->device);
        unsigned int depth = attr->cqe;
index 4f02ba06b210a4f967ca9e78c2153c9ac66a9d96..6afdc02f586910c6f2d654a7cd08011c84c481b9 100644 (file)
@@ -329,7 +329,7 @@ int erdma_query_device(struct ib_device *dev, struct ib_device_attr *attr,
 int erdma_get_port_immutable(struct ib_device *dev, u32 port,
                             struct ib_port_immutable *ib_port_immutable);
 int erdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                   struct ib_udata *data);
+                   struct uverbs_attr_bundle *attrs);
 int erdma_query_port(struct ib_device *dev, u32 port,
                     struct ib_port_attr *attr);
 int erdma_query_gid(struct ib_device *dev, u32 port, int idx,
index 56dc3908da2f4ce80952841a0e70b43108664073..4ec66611a143401702467f2bc9e7b4caefa33850 100644 (file)
@@ -353,9 +353,10 @@ static int set_cqe_size(struct hns_roce_cq *hr_cq, struct ib_udata *udata,
 }
 
 int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr,
-                      struct ib_udata *udata)
+                      struct uverbs_attr_bundle *attrs)
 {
        struct hns_roce_dev *hr_dev = to_hr_dev(ib_cq->device);
+       struct ib_udata *udata = &attrs->driver_udata;
        struct hns_roce_ib_create_cq_resp resp = {};
        struct hns_roce_cq *hr_cq = to_hr_cq(ib_cq);
        struct ib_device *ibdev = &hr_dev->ib_dev;
index ff0b3f68ee3a4008b69cbfc44ebf43994682ea77..ef50cd03f489039d6da7413c6c5be0e8e2935ef3 100644 (file)
@@ -1267,7 +1267,7 @@ __be32 send_ieth(const struct ib_send_wr *wr);
 int to_hr_qp_type(int qp_type);
 
 int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr,
-                      struct ib_udata *udata);
+                      struct uverbs_attr_bundle *attrs);
 
 int hns_roce_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata);
 int hns_roce_db_map_user(struct hns_roce_ucontext *context, unsigned long virt,
index 12704efb7b19a8e7bd5422638617a6cd7f8436eb..fc0ce35da14e6448f582a1213b34ab10abce8a62 100644 (file)
@@ -2035,14 +2035,15 @@ static inline int cq_validate_flags(u32 flags, u8 hw_rev)
  * irdma_create_cq - create cq
  * @ibcq: CQ allocated
  * @attr: attributes for cq
- * @udata: user data
+ * @attrs: uverbs attribute bundle
  */
 static int irdma_create_cq(struct ib_cq *ibcq,
                           const struct ib_cq_init_attr *attr,
-                          struct ib_udata *udata)
+                          struct uverbs_attr_bundle *attrs)
 {
 #define IRDMA_CREATE_CQ_MIN_REQ_LEN offsetofend(struct irdma_create_cq_req, user_cq_buf)
 #define IRDMA_CREATE_CQ_MIN_RESP_LEN offsetofend(struct irdma_create_cq_resp, cq_size)
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        struct irdma_device *iwdev = to_iwdev(ibdev);
        struct irdma_pci_f *rf = iwdev->rf;
index c6a3fd57a1969f641ea4c39579e557744e3cb8b4..f04a679d287144c3f531d60e110cf885c22902a8 100644 (file)
@@ -6,8 +6,9 @@
 #include "mana_ib.h"
 
 int mana_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata)
+                     struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct mana_ib_cq *cq = container_of(ibcq, struct mana_ib_cq, ibcq);
        struct mana_ib_create_cq_resp resp = {};
        struct mana_ib_ucontext *mana_ucontext;
index 977da9569701466be989d0c12e6fadfbe463e109..b53a5b4de908d05a5ceadc95fe4ac40cb3e3b7de 100644 (file)
@@ -429,7 +429,7 @@ void mana_ib_uncfg_vport(struct mana_ib_dev *dev, struct mana_ib_pd *pd,
                         u32 port);
 
 int mana_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata);
+                     struct uverbs_attr_bundle *attrs);
 
 int mana_ib_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata);
 
index 4cd738aae53c76ba9e44e603fc2003a9242d74e1..aa9ea6ba26e534e29e4961e417eadc48ab57bf66 100644 (file)
@@ -172,8 +172,9 @@ err_buf:
 
 #define CQ_CREATE_FLAGS_SUPPORTED IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION
 int mlx4_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata)
+                     struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        int vector = attr->comp_vector;
index 41ca1114a9958e2dd5e81eb28aca8c03c670234e..b52bceff7d9708bbf07d6136cbf234560e1afa15 100644 (file)
@@ -767,7 +767,7 @@ int mlx4_ib_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
 int mlx4_ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period);
 int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata);
 int mlx4_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata);
+                     struct uverbs_attr_bundle *attrs);
 int mlx4_ib_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 int mlx4_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
 int mlx4_ib_arm_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
index 9773d2a3d97fb0789be52805285bf8619eb1ad3b..eebfd6fa4d9b797fbd11d4548746eba77a3772e6 100644 (file)
@@ -942,8 +942,9 @@ static void notify_soft_wc_handler(struct work_struct *work)
 }
 
 int mlx5_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata)
+                     struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        int vector = attr->comp_vector;
index 74a20df8b2923110c45237d34b495d0188e57431..20c9dbbf17bb70c891cac8a8b2f07d42d7b1d44c 100644 (file)
@@ -1328,7 +1328,7 @@ int mlx5_ib_read_wqe_rq(struct mlx5_ib_qp *qp, int wqe_index, void *buffer,
 int mlx5_ib_read_wqe_srq(struct mlx5_ib_srq *srq, int wqe_index, void *buffer,
                         size_t buflen, size_t *bc);
 int mlx5_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                     struct ib_udata *udata);
+                     struct uverbs_attr_bundle *attrs);
 int mlx5_ib_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
 int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags);
index e1325f2927d6e3333523ee0c7f322d16ea516b14..6a1e2e79ddc31772232a2c1842ec8a1babd76b2d 100644 (file)
@@ -574,8 +574,9 @@ static int mthca_destroy_qp(struct ib_qp *qp, struct ib_udata *udata)
 
 static int mthca_create_cq(struct ib_cq *ibcq,
                           const struct ib_cq_init_attr *attr,
-                          struct ib_udata *udata)
+                          struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        struct mthca_create_cq ucmd;
index c849fdbd4c994d7d63291c631fb478ac46326e04..979de8f8df1480faeae0777d2fdede628338cd61 100644 (file)
@@ -963,8 +963,9 @@ err:
 }
 
 int ocrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                    struct ib_udata *udata)
+                    struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        struct ocrdma_cq *cq = get_ocrdma_cq(ibcq);
index f860b7fcef3389272942f3ed12a394ea414cfcc8..0644346d8d9889f83edd82e0408f2e9a5d6a9d1c 100644 (file)
@@ -70,7 +70,7 @@ int ocrdma_alloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 int ocrdma_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 
 int ocrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                    struct ib_udata *udata);
+                    struct uverbs_attr_bundle *attrs);
 int ocrdma_resize_cq(struct ib_cq *, int cqe, struct ib_udata *);
 int ocrdma_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata);
 
index f118ce0a9a617b4226d0195048299827f2a11d37..568a5b18803fc459b5a697af4c522d53e528a913 100644 (file)
@@ -900,8 +900,9 @@ int qedr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
 }
 
 int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                  struct ib_udata *udata)
+                  struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        struct qedr_ucontext *ctx = rdma_udata_to_drv_context(
                udata, struct qedr_ucontext, ibucontext);
index 081753df79ef0a07641421221182287836631643..5731458abb06812871103cc0c30cc1406bbd3217 100644 (file)
@@ -52,7 +52,7 @@ int qedr_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 int qedr_alloc_xrcd(struct ib_xrcd *ibxrcd, struct ib_udata *udata);
 int qedr_dealloc_xrcd(struct ib_xrcd *ibxrcd, struct ib_udata *udata);
 int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                  struct ib_udata *udata);
+                  struct uverbs_attr_bundle *attrs);
 int qedr_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata);
 int qedr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags);
 int qedr_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *attrs,
index 6289238cc5af8ad24334d787390bb5bb03141db8..217af34e82b3c861d15945773e5fc6923eae75b8 100644 (file)
@@ -577,7 +577,7 @@ out_unlock:
 }
 
 int usnic_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                      struct ib_udata *udata)
+                      struct uverbs_attr_bundle *attrs)
 {
        if (attr->flags)
                return -EOPNOTSUPP;
index 6ca9ee0dddbe1496f2284494028f3d7c555dda82..53f53f2d53be07b27c99cd276c93752a9a79b5fa 100644 (file)
@@ -56,7 +56,7 @@ int usnic_ib_destroy_qp(struct ib_qp *qp, struct ib_udata *udata);
 int usnic_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
                                int attr_mask, struct ib_udata *udata);
 int usnic_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                      struct ib_udata *udata);
+                      struct uverbs_attr_bundle *attrs);
 int usnic_ib_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 struct ib_mr *usnic_ib_reg_mr(struct ib_pd *pd, u64 start, u64 length,
                                u64 virt_addr, int access_flags,
index 6aa40bd2fd52d3dd921b32b7425adf338e1b0188..b3df6eb9b8eff64fba34f007c3af8a6d67ac006a 100644 (file)
@@ -94,13 +94,14 @@ int pvrdma_req_notify_cq(struct ib_cq *ibcq,
  * pvrdma_create_cq - create completion queue
  * @ibcq: Allocated CQ
  * @attr: completion queue attributes
- * @udata: user data
+ * @attrs: bundle
  *
  * @return: 0 on success
  */
 int pvrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                    struct ib_udata *udata)
+                    struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        int entries = attr->cqe;
        struct pvrdma_dev *dev = to_vdev(ibdev);
index 78807b23d831c66d2c60532bd3b326a709fd207b..4b9edc03d73df413f1fd5963e3fcdc46ae579e9c 100644 (file)
@@ -375,7 +375,7 @@ struct ib_mr *pvrdma_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
 int pvrdma_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg,
                     int sg_nents, unsigned int *sg_offset);
 int pvrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                    struct ib_udata *udata);
+                    struct uverbs_attr_bundle *attrs);
 int pvrdma_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 int pvrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
 int pvrdma_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
index 82c3f5932249f88dd36bd822f1567186656915e3..0ca2743f107524b84a501f3e69d06f4528c4ef98 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
+#include <rdma/uverbs_ioctl.h>
 #include "cq.h"
 #include "vt.h"
 #include "trace.h"
@@ -149,15 +150,16 @@ static void send_complete(struct work_struct *work)
  * rvt_create_cq - create a completion queue
  * @ibcq: Allocated CQ
  * @attr: creation attributes
- * @udata: user data for libibverbs.so
+ * @attrs: uverbs bundle
  *
  * Called by ib_create_cq() in the generic verbs code.
  *
  * Return: 0 on success
  */
 int rvt_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata)
+                 struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
        struct rvt_dev_info *rdi = ib_to_rvt(ibdev);
        struct rvt_cq *cq = ibcq_to_rvtcq(ibcq);
index d49b6d1a26cbbd13337a6af64db2a9ca45bef173..4028702a7b2fda05909c9aeeadc3aebbd016a79a 100644 (file)
@@ -10,7 +10,7 @@
 #include <rdma/rdmavt_cq.h>
 
 int rvt_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata);
+                 struct uverbs_attr_bundle *attrs);
 int rvt_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata);
 int rvt_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags notify_flags);
 int rvt_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata);
index c7d4d8ab5a0941b1fe5b3c3a0e806dbdc50aff16..82bb7f33290c01fe7cfc058e8e41cf109d4db7d1 100644 (file)
@@ -1053,8 +1053,9 @@ static int rxe_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
 
 /* cq */
 static int rxe_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
-                        struct ib_udata *udata)
+                        struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *dev = ibcq->device;
        struct rxe_dev *rxe = to_rdev(dev);
        struct rxe_cq *cq = to_rcq(ibcq);
index ecf0444666b4ebd9597e53b0d2a9598f0306a175..986666c19378a10ef8d52d31b965a3d3981f6787 100644 (file)
@@ -1124,12 +1124,13 @@ int siw_destroy_cq(struct ib_cq *base_cq, struct ib_udata *udata)
  *
  * @base_cq: CQ as allocated by RDMA midlayer
  * @attr: Initial CQ attributes
- * @udata: relates to user context
+ * @attrs: uverbs bundle
  */
 
 int siw_create_cq(struct ib_cq *base_cq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata)
+                 struct uverbs_attr_bundle *attrs)
 {
+       struct ib_udata *udata = &attrs->driver_udata;
        struct siw_device *sdev = to_siw_dev(base_cq->device);
        struct siw_cq *cq = to_siw_cq(base_cq);
        int rv, size = attr->cqe;
index 4b57a4fb72373f23555b91c1c466a041332760de..1f1a305540af49b71db365a3420a5c45ab7e6bc0 100644 (file)
@@ -43,7 +43,7 @@ int siw_get_port_immutable(struct ib_device *base_dev, u32 port,
 int siw_query_device(struct ib_device *base_dev, struct ib_device_attr *attr,
                     struct ib_udata *udata);
 int siw_create_cq(struct ib_cq *base_cq, const struct ib_cq_init_attr *attr,
-                 struct ib_udata *udata);
+                 struct uverbs_attr_bundle *attrs);
 int siw_query_port(struct ib_device *base_dev, u32 port,
                   struct ib_port_attr *attr);
 int siw_query_gid(struct ib_device *base_dev, u32 port, int idx,
index 5a193008f99c894f238d95c1de8ef5a232a99bf2..825043512b2d1a142eb7eac5fb4a5ffeb10bc5bf 100644 (file)
@@ -2465,7 +2465,7 @@ struct ib_device_ops {
                        int qp_attr_mask, struct ib_qp_init_attr *qp_init_attr);
        int (*destroy_qp)(struct ib_qp *qp, struct ib_udata *udata);
        int (*create_cq)(struct ib_cq *cq, const struct ib_cq_init_attr *attr,
-                        struct ib_udata *udata);
+                        struct uverbs_attr_bundle *attrs);
        int (*modify_cq)(struct ib_cq *cq, u16 cq_count, u16 cq_period);
        int (*destroy_cq)(struct ib_cq *cq, struct ib_udata *udata);
        int (*resize_cq)(struct ib_cq *cq, int cqe, struct ib_udata *udata);
index dafc7ebe545b8d26500eeeb14a04f391efc8a998..ec719053aab94dc05084cb051a247f82e26f773d 100644 (file)
@@ -37,9 +37,6 @@
 #define UVERBS_ID_NS_MASK 0xF000
 #define UVERBS_ID_NS_SHIFT 12
 
-#define UVERBS_UDATA_DRIVER_DATA_NS    1
-#define UVERBS_UDATA_DRIVER_DATA_FLAG  (1UL << UVERBS_ID_NS_SHIFT)
-
 enum uverbs_default_objects {
        UVERBS_OBJECT_DEVICE, /* No instances of DEVICE are allowed */
        UVERBS_OBJECT_PD,
@@ -61,8 +58,10 @@ enum uverbs_default_objects {
 };
 
 enum {
-       UVERBS_ATTR_UHW_IN = UVERBS_UDATA_DRIVER_DATA_FLAG,
+       UVERBS_ID_DRIVER_NS = 1UL << UVERBS_ID_NS_SHIFT,
+       UVERBS_ATTR_UHW_IN = UVERBS_ID_DRIVER_NS,
        UVERBS_ATTR_UHW_OUT,
+       UVERBS_ID_DRIVER_NS_WITH_UHW,
 };
 
 enum uverbs_methods_device {