Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

RDMA/bnxt_re: Add compatibility checks to the uapi path for no data

If drivers ever want to go from an empty drvdata to something with them
they need to have called ib_is_udata_in_empty(). Add the missing calls to
all the system calls that don't have req structures.

Link: https://patch.msgid.link/r/9-v3-bd56dd443069+49-bnxt_re_uapi_jgg@nvidia.com
Tested-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Acked-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

+57
+57
drivers/infiniband/hw/bnxt_re/ib_verbs.c
··· 190 190 size_t outlen = (udata) ? udata->outlen : 0; 191 191 int rc = 0; 192 192 193 + rc = ib_is_udata_in_empty(udata); 194 + if (rc) 195 + return rc; 196 + 193 197 memset(ib_attr, 0, sizeof(*ib_attr)); 194 198 memcpy(&ib_attr->fw_ver, dev_attr->fw_ver, 195 199 min(sizeof(dev_attr->fw_ver), ··· 696 692 { 697 693 struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd); 698 694 struct bnxt_re_dev *rdev = pd->rdev; 695 + int ret; 696 + 697 + ret = ib_is_udata_in_empty(udata); 698 + if (ret) 699 + return ret; 699 700 700 701 if (udata) { 701 702 rdma_user_mmap_entry_remove(pd->pd_db_mmap); ··· 728 719 struct bnxt_re_user_mmap_entry *entry = NULL; 729 720 u32 active_pds; 730 721 int rc = 0; 722 + 723 + rc = ib_is_udata_in_empty(udata); 724 + if (rc) 725 + return rc; 731 726 732 727 pd->rdev = rdev; 733 728 if (bnxt_qplib_alloc_pd(&rdev->qplib_res, &pd->qplib_pd)) { ··· 846 833 u32 active_ahs; 847 834 u8 nw_type; 848 835 int rc; 836 + 837 + rc = ib_is_udata_in_empty(udata); 838 + if (rc) 839 + return rc; 849 840 850 841 if (!(rdma_ah_get_ah_flags(ah_attr) & IB_AH_GRH)) { 851 842 ibdev_err(&rdev->ibdev, "Failed to alloc AH: GRH not set"); ··· 1011 994 struct bnxt_qplib_nq *rcq_nq = NULL; 1012 995 unsigned int flags; 1013 996 int rc; 997 + 998 + rc = ib_is_udata_in_empty(udata); 999 + if (rc) 1000 + return rc; 1014 1001 1015 1002 bnxt_re_debug_rem_qpinfo(rdev, qp); 1016 1003 ··· 1864 1843 ib_srq); 1865 1844 struct bnxt_re_dev *rdev = srq->rdev; 1866 1845 struct bnxt_qplib_srq *qplib_srq = &srq->qplib_srq; 1846 + int ret; 1847 + 1848 + ret = ib_is_udata_in_empty(udata); 1849 + if (ret) 1850 + return ret; 1867 1851 1868 1852 if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT) { 1869 1853 free_page((unsigned long)srq->uctx_srq_page); ··· 2018 1992 struct bnxt_re_srq *srq = container_of(ib_srq, struct bnxt_re_srq, 2019 1993 ib_srq); 2020 1994 struct bnxt_re_dev *rdev = srq->rdev; 1995 + int ret; 1996 + 1997 + ret = ib_is_udata_in_empty(udata); 1998 + if (ret) 1999 + return ret; 2021 2000 2022 2001 switch (srq_attr_mask) { 2023 2002 case IB_SRQ_MAX_WR: ··· 2139 2108 int rc, entries; 2140 2109 unsigned int flags; 2141 2110 u8 nw_type; 2111 + 2112 + rc = ib_is_udata_in_empty(udata); 2113 + if (rc) 2114 + return rc; 2142 2115 2143 2116 if (qp_attr_mask & ~(IB_QP_ATTR_STANDARD_BITS | IB_QP_RATE_LIMIT)) 2144 2117 return -EOPNOTSUPP; ··· 3161 3126 struct bnxt_qplib_nq *nq; 3162 3127 struct bnxt_re_dev *rdev; 3163 3128 struct bnxt_re_cq *cq; 3129 + int ret; 3164 3130 3165 3131 cq = container_of(ib_cq, struct bnxt_re_cq, ib_cq); 3166 3132 rdev = cq->rdev; 3167 3133 nq = cq->qplib_cq.nq; 3168 3134 cctx = rdev->chip_ctx; 3135 + 3136 + ret = ib_is_udata_in_empty(udata); 3137 + if (ret) 3138 + return ret; 3169 3139 3170 3140 if (cctx->modes.toggle_bits & BNXT_QPLIB_CQ_TOGGLE_BIT) { 3171 3141 free_page((unsigned long)cq->uctx_cq_page); ··· 4118 4078 struct bnxt_re_dev *rdev = mr->rdev; 4119 4079 int rc; 4120 4080 4081 + rc = ib_is_udata_in_empty(udata); 4082 + if (rc) 4083 + return rc; 4084 + 4121 4085 rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr); 4122 4086 if (rc) { 4123 4087 ibdev_err(&rdev->ibdev, "Dereg MR failed: %#x\n", rc); ··· 4229 4185 struct bnxt_re_mw *mw; 4230 4186 u32 active_mws; 4231 4187 int rc; 4188 + 4189 + rc = ib_is_udata_in_empty(udata); 4190 + if (rc) 4191 + return ERR_PTR(rc); 4232 4192 4233 4193 mw = kzalloc_obj(*mw); 4234 4194 if (!mw) ··· 4361 4313 struct bnxt_re_dev *rdev = pd->rdev; 4362 4314 struct ib_umem *umem; 4363 4315 struct ib_mr *ib_mr; 4316 + int ret; 4317 + 4318 + ret = ib_is_udata_in_empty(udata); 4319 + if (ret) 4320 + return ERR_PTR(ret); 4364 4321 4365 4322 if (dmah) 4366 4323 return ERR_PTR(-EOPNOTSUPP); ··· 4549 4496 struct bnxt_re_dev *rdev = qp->rdev; 4550 4497 struct bnxt_re_flow *flow; 4551 4498 int rc; 4499 + 4500 + rc = ib_is_udata_in_empty(udata); 4501 + if (rc) 4502 + return ERR_PTR(rc); 4552 4503 4553 4504 if (attr->type != IB_FLOW_ATTR_SNIFFER || 4554 4505 !rdev->rcfw.roce_mirror)