[rdma:wip/leon-for-next 80/84] drivers/infiniband/hw/bnxt_re/ib_verbs.c:2178:12: error: invalid storage class for function 'bnxt_re_init_user_srq'

kernel test robot <[email protected]> Tue, 28 Jul 2026 03:49:54 +0200
Newsgroups org.kernel.vger.linux-rdma,dev.linux.lists.oe-kbuild-all
Message-ID <[email protected]>
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git wip/leon-for-next
head:   983c450ae26317c58b62cac5afa58725ada7d256
commit: 2b248ac9c95bf0175fda9f3a869c7c4054893de0 [80/84] RDMA/bnxt_re: Replace per-device hash tables with per-context XArrays
config: x86_64-rhel-9.4-bpf (https://download.01.org/0day-ci/archive/20260728/[email protected]/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260728/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All error/warnings (new ones prefixed by >>):

   drivers/infiniband/hw/bnxt_re/ib_verbs.c: In function 'bnxt_re_destroy_srq':
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2178:12: error: invalid storage class for function 'bnxt_re_init_user_srq'
    2178 | static int bnxt_re_init_user_srq(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2396:12: error: invalid storage class for function 'bnxt_re_modify_shadow_qp'
    2396 | static int bnxt_re_modify_shadow_qp(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2428:13: error: invalid storage class for function 'bnxt_re_is_modify_ok'
    2428 | static bool bnxt_re_is_modify_ok(enum ib_qp_attr_mask ext_mask,
         |             ^~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2774:12: error: invalid storage class for function 'bnxt_re_build_qp1_send_v2'
    2774 | static int bnxt_re_build_qp1_send_v2(struct bnxt_re_qp *qp,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2948:12: error: invalid storage class for function 'bnxt_re_build_qp1_shadow_qp_recv'
    2948 | static int bnxt_re_build_qp1_shadow_qp_recv(struct bnxt_re_qp *qp,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2991:12: error: invalid storage class for function 'is_ud_qp'
    2991 | static int is_ud_qp(struct bnxt_re_qp *qp)
         |            ^~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:2997:12: error: invalid storage class for function 'bnxt_re_build_send_wqe'
    2997 | static int bnxt_re_build_send_wqe(struct bnxt_re_qp *qp,
         |            ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3036:12: error: invalid storage class for function 'bnxt_re_build_rdma_wqe'
    3036 | static int bnxt_re_build_rdma_wqe(const struct ib_send_wr *wr,
         |            ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3068:12: error: invalid storage class for function 'bnxt_re_build_atomic_wqe'
    3068 | static int bnxt_re_build_atomic_wqe(const struct ib_send_wr *wr,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3095:12: error: invalid storage class for function 'bnxt_re_build_inv_wqe'
    3095 | static int bnxt_re_build_inv_wqe(const struct ib_send_wr *wr,
         |            ^~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3109:12: error: invalid storage class for function 'bnxt_re_build_reg_wqe'
    3109 | static int bnxt_re_build_reg_wqe(const struct ib_reg_wr *wr,
         |            ^~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3145:12: error: invalid storage class for function 'bnxt_re_copy_inline_data'
    3145 | static int bnxt_re_copy_inline_data(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3175:12: error: invalid storage class for function 'bnxt_re_copy_wr_payload'
    3175 | static int bnxt_re_copy_wr_payload(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3190:13: error: invalid storage class for function 'bnxt_ud_qp_hw_stall_workaround'
    3190 | static void bnxt_ud_qp_hw_stall_workaround(struct bnxt_re_qp *qp)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3206:12: error: invalid storage class for function 'bnxt_re_post_send_shadow_qp'
    3206 | static int bnxt_re_post_send_shadow_qp(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3254:13: error: invalid storage class for function 'bnxt_re_legacy_set_uc_fence'
    3254 | static void bnxt_re_legacy_set_uc_fence(struct bnxt_qplib_swqe *wqe)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3363:12: error: invalid storage class for function 'bnxt_re_post_recv_shadow_qp'
    3363 | static int bnxt_re_post_recv_shadow_qp(struct bnxt_re_dev *rdev,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3454:30: error: invalid storage class for function 'bnxt_re_get_nq'
    3454 | static struct bnxt_qplib_nq *bnxt_re_get_nq(struct bnxt_re_dev *rdev)
         |                              ^~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3469:13: error: invalid storage class for function 'bnxt_re_put_nq'
    3469 | static void bnxt_re_put_nq(struct bnxt_re_dev *rdev, struct bnxt_qplib_nq *nq)
         |             ^~~~~~~~~~~~~~
>> drivers/infiniband/hw/bnxt_re/ib_verbs.c:3673:13: error: invalid storage class for function 'bnxt_re_resize_cq_complete'
    3673 | static void bnxt_re_resize_cq_complete(struct bnxt_re_cq *cq)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3773:11: error: invalid storage class for function '__req_to_ib_wc_status'
    3773 | static u8 __req_to_ib_wc_status(u8 qstatus)
         |           ^~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3806:11: error: invalid storage class for function '__rawqp1_to_ib_wc_status'
    3806 | static u8 __rawqp1_to_ib_wc_status(u8 qstatus)
         |           ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3830:11: error: invalid storage class for function '__rc_to_ib_wc_status'
    3830 | static u8 __rc_to_ib_wc_status(u8 qstatus)
         |           ^~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3856:13: error: invalid storage class for function 'bnxt_re_process_req_wc'
    3856 | static void bnxt_re_process_req_wc(struct ib_wc *wc, struct bnxt_qplib_cqe *cqe)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3900:12: error: invalid storage class for function 'bnxt_re_check_packet_type'
    3900 | static int bnxt_re_check_packet_type(u16 raweth_qp1_flags,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3926:12: error: invalid storage class for function 'bnxt_re_to_ib_nw_type'
    3926 | static int bnxt_re_to_ib_nw_type(int nw_type)
         |            ^~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3944:13: error: invalid storage class for function 'bnxt_re_is_loopback_packet'
    3944 | static bool bnxt_re_is_loopback_packet(struct bnxt_re_dev *rdev,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:3989:12: error: invalid storage class for function 'bnxt_re_process_raw_qp_pkt_rx'
    3989 | static int bnxt_re_process_raw_qp_pkt_rx(struct bnxt_re_qp *gsi_qp,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4100:13: error: invalid storage class for function 'bnxt_re_process_res_rawqp1_wc'
    4100 | static void bnxt_re_process_res_rawqp1_wc(struct ib_wc *wc,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4108:13: error: invalid storage class for function 'bnxt_re_check_if_vlan_valid'
    4108 | static bool bnxt_re_check_if_vlan_valid(struct bnxt_re_dev *rdev,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4121:13: error: invalid storage class for function 'bnxt_re_is_vlan_pkt'
    4121 | static bool bnxt_re_is_vlan_pkt(struct bnxt_qplib_cqe *orig_cqe,
         |             ^~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4147:13: error: invalid storage class for function 'bnxt_re_process_res_rc_wc'
    4147 | static void bnxt_re_process_res_rc_wc(struct ib_wc *wc,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4162:13: error: invalid storage class for function 'bnxt_re_process_res_shadow_qp_wc'
    4162 | static void bnxt_re_process_res_shadow_qp_wc(struct bnxt_re_qp *gsi_sqp,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4210:13: error: invalid storage class for function 'bnxt_re_process_res_ud_wc'
    4210 | static void bnxt_re_process_res_ud_wc(struct bnxt_re_qp *qp,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4245:12: error: invalid storage class for function 'send_phantom_wqe'
    4245 | static int send_phantom_wqe(struct bnxt_re_qp *qp)
         |            ^~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4518:12: error: invalid storage class for function 'bnxt_re_set_page'
    4518 | static int bnxt_re_set_page(struct ib_mr *ib_mr, u64 addr)
         |            ^~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4653:22: error: invalid storage class for function '__bnxt_re_user_reg_mr'
    4653 | static struct ib_mr *__bnxt_re_user_reg_mr(struct ib_pd *ib_pd, u64 length, u64 virt_addr,
         |                      ^~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4904:12: error: invalid storage class for function 'bnxt_re_setup_vnic'
    4904 | static int bnxt_re_setup_vnic(struct bnxt_re_dev *rdev, struct bnxt_re_qp *qp)
         |            ^~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:5102:1: error: expected declaration or statement at end of input
    5102 | }
         | ^
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:5103: warning: control reaches end of non-void function [-Wreturn-type]
   drivers/infiniband/hw/bnxt_re/ib_verbs.c: At top level:
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:5069:5: warning: 'bnxt_re_process_mad' defined but not used [-Wunused-function]
    5069 | int bnxt_re_process_mad(struct ib_device *ibdev, int mad_flags,
         |     ^~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:5055:6: warning: 'bnxt_re_mmap_free' defined but not used [-Wunused-function]
    5055 | void bnxt_re_mmap_free(struct rdma_user_mmap_entry *rdma_entry)
         |      ^~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4996:5: warning: 'bnxt_re_mmap' defined but not used [-Wunused-function]
    4996 | int bnxt_re_mmap(struct ib_ucontext *ib_uctx, struct vm_area_struct *vma)
         |     ^~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4975:5: warning: 'bnxt_re_destroy_flow' defined but not used [-Wunused-function]
    4975 | int bnxt_re_destroy_flow(struct ib_flow *flow_id)
         |     ^~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4922:17: warning: 'bnxt_re_create_flow' defined but not used [-Wunused-function]
    4922 | struct ib_flow *bnxt_re_create_flow(struct ib_qp *ib_qp,
         |                 ^~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4880:6: warning: 'bnxt_re_dealloc_ucontext' defined but not used [-Wunused-function]
    4880 | void bnxt_re_dealloc_ucontext(struct ib_ucontext *ib_uctx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4784:5: warning: 'bnxt_re_alloc_ucontext' defined but not used [-Wunused-function]
    4784 | int bnxt_re_alloc_ucontext(struct ib_ucontext *ctx, struct ib_udata *udata)
         |     ^~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4756:15: warning: 'bnxt_re_reg_user_mr_dmabuf' defined but not used [-Wunused-function]
    4756 | struct ib_mr *bnxt_re_reg_user_mr_dmabuf(struct ib_pd *ib_pd, u64 start,
         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4728:15: warning: 'bnxt_re_reg_user_mr' defined but not used [-Wunused-function]
    4728 | struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
         |               ^~~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4636:5: warning: 'bnxt_re_dealloc_mw' defined but not used [-Wunused-function]
    4636 | int bnxt_re_dealloc_mw(struct ib_mw *ib_mw)
         |     ^~~~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4597:15: warning: 'bnxt_re_alloc_mw' defined but not used [-Wunused-function]
    4597 | struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
         |               ^~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4538:15: warning: 'bnxt_re_alloc_mr' defined but not used [-Wunused-function]
    4538 | struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type type,
         |               ^~~~~~~~~~~~~~~~
   drivers/infiniband/hw/bnxt_re/ib_verbs.c:4529:5: warning: 'bnxt_re_map_mr_sg' defined but not used [-Wunused-function]
    4529 | int bnxt_re_map_mr_sg(struct ib_mr *ib_mr, struct scatterlist *sg, int sg_nents,
         |     ^~~~~~~~~~~~~~~~~


vim +/bnxt_re_init_user_srq +2178 drivers/infiniband/hw/bnxt_re/ib_verbs.c

37cb11acf1f72a Devesh Sharma      2018-01-11  2177  
37cb11acf1f72a Devesh Sharma      2018-01-11 @2178  static int bnxt_re_init_user_srq(struct bnxt_re_dev *rdev,
37cb11acf1f72a Devesh Sharma      2018-01-11  2179  				 struct bnxt_re_pd *pd,
37cb11acf1f72a Devesh Sharma      2018-01-11  2180  				 struct bnxt_re_srq *srq,
37cb11acf1f72a Devesh Sharma      2018-01-11  2181  				 struct ib_udata *udata)
37cb11acf1f72a Devesh Sharma      2018-01-11  2182  {
37cb11acf1f72a Devesh Sharma      2018-01-11  2183  	struct bnxt_re_srq_req ureq;
37cb11acf1f72a Devesh Sharma      2018-01-11  2184  	struct bnxt_qplib_srq *qplib_srq = &srq->qplib_srq;
37cb11acf1f72a Devesh Sharma      2018-01-11  2185  	struct ib_umem *umem;
37cb11acf1f72a Devesh Sharma      2018-01-11  2186  	int bytes = 0;
89944450547334 Shamir Rabinovitch 2019-02-07  2187  	struct bnxt_re_ucontext *cntx = rdma_udata_to_drv_context(
89944450547334 Shamir Rabinovitch 2019-02-07  2188  		udata, struct bnxt_re_ucontext, ib_uctx);
b33d860a13b4f7 Jason Gunthorpe    2026-03-03  2189  	int rc;
89944450547334 Shamir Rabinovitch 2019-02-07  2190  
b33d860a13b4f7 Jason Gunthorpe    2026-03-03  2191  	rc = ib_copy_validate_udata_in(udata, ureq, srq_handle);
b33d860a13b4f7 Jason Gunthorpe    2026-03-03  2192  	if (rc)
b33d860a13b4f7 Jason Gunthorpe    2026-03-03  2193  		return rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2194  
fddcbbb02af42a Devesh Sharma      2020-04-02  2195  	bytes = (qplib_srq->max_wqe * qplib_srq->wqe_size);
37cb11acf1f72a Devesh Sharma      2018-01-11  2196  	bytes = PAGE_ALIGN(bytes);
af841056860d2d Jiri Pirko         2026-05-29  2197  	umem = ib_umem_get_va(&rdev->ibdev, ureq.srqva, bytes,
c320e527e15483 Moni Shoua         2020-01-15  2198  			      IB_ACCESS_LOCAL_WRITE);
37cb11acf1f72a Devesh Sharma      2018-01-11  2199  	if (IS_ERR(umem))
37cb11acf1f72a Devesh Sharma      2018-01-11  2200  		return PTR_ERR(umem);
37cb11acf1f72a Devesh Sharma      2018-01-11  2201  
37cb11acf1f72a Devesh Sharma      2018-01-11  2202  	srq->umem = umem;
6ef999f5002132 Jason Gunthorpe    2020-09-29  2203  	qplib_srq->sg_info.umem = umem;
0c4dcd60281750 Devesh Sharma      2020-02-15  2204  	qplib_srq->sg_info.pgsize = PAGE_SIZE;
0c4dcd60281750 Devesh Sharma      2020-02-15  2205  	qplib_srq->sg_info.pgshft = PAGE_SHIFT;
37cb11acf1f72a Devesh Sharma      2018-01-11  2206  	qplib_srq->srq_handle = ureq.srq_handle;
37cb11acf1f72a Devesh Sharma      2018-01-11  2207  	qplib_srq->dpi = &cntx->dpi;
37cb11acf1f72a Devesh Sharma      2018-01-11  2208  
37cb11acf1f72a Devesh Sharma      2018-01-11  2209  	return 0;
37cb11acf1f72a Devesh Sharma      2018-01-11  2210  }
37cb11acf1f72a Devesh Sharma      2018-01-11  2211  
68e326dea1dba9 Leon Romanovsky    2019-04-03 @2212  int bnxt_re_create_srq(struct ib_srq *ib_srq,
37cb11acf1f72a Devesh Sharma      2018-01-11  2213  		       struct ib_srq_init_attr *srq_init_attr,
37cb11acf1f72a Devesh Sharma      2018-01-11  2214  		       struct ib_udata *udata)
37cb11acf1f72a Devesh Sharma      2018-01-11  2215  {
fddcbbb02af42a Devesh Sharma      2020-04-02  2216  	struct bnxt_qplib_dev_attr *dev_attr;
48f996d4adf15a Chandramohan Akula 2023-10-23  2217  	struct bnxt_re_ucontext *uctx;
fddcbbb02af42a Devesh Sharma      2020-04-02  2218  	struct bnxt_re_dev *rdev;
fddcbbb02af42a Devesh Sharma      2020-04-02  2219  	struct bnxt_re_srq *srq;
fddcbbb02af42a Devesh Sharma      2020-04-02  2220  	struct bnxt_re_pd *pd;
fddcbbb02af42a Devesh Sharma      2020-04-02  2221  	struct ib_pd *ib_pd;
cb95709e0dca7a Chandramohan Akula 2023-07-26  2222  	u32 active_srqs;
2b2f078236a445 Leon Romanovsky    2026-03-18  2223  	int rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2224  
fddcbbb02af42a Devesh Sharma      2020-04-02  2225  	ib_pd = ib_srq->pd;
fddcbbb02af42a Devesh Sharma      2020-04-02  2226  	pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);
fddcbbb02af42a Devesh Sharma      2020-04-02  2227  	rdev = pd->rdev;
9264cd6aa8f194 Kalesh AP          2025-01-09  2228  	dev_attr = rdev->dev_attr;
fddcbbb02af42a Devesh Sharma      2020-04-02  2229  	srq = container_of(ib_srq, struct bnxt_re_srq, ib_srq);
fddcbbb02af42a Devesh Sharma      2020-04-02  2230  
37cb11acf1f72a Devesh Sharma      2018-01-11  2231  	if (srq_init_attr->attr.max_wr >= dev_attr->max_srq_wqes) {
6ccad8483b2866 Devesh Sharma      2020-02-15  2232  		ibdev_err(&rdev->ibdev, "Create CQ failed - max exceeded");
37cb11acf1f72a Devesh Sharma      2018-01-11  2233  		rc = -EINVAL;
37cb11acf1f72a Devesh Sharma      2018-01-11  2234  		goto exit;
37cb11acf1f72a Devesh Sharma      2018-01-11  2235  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2236  
37cb11acf1f72a Devesh Sharma      2018-01-11  2237  	if (srq_init_attr->srq_type != IB_SRQT_BASIC) {
8380b74e7d606c Kamal Heib         2018-07-30  2238  		rc = -EOPNOTSUPP;
37cb11acf1f72a Devesh Sharma      2018-01-11  2239  		goto exit;
37cb11acf1f72a Devesh Sharma      2018-01-11  2240  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2241  
48f996d4adf15a Chandramohan Akula 2023-10-23  2242  	uctx = rdma_udata_to_drv_context(udata, struct bnxt_re_ucontext, ib_uctx);
37cb11acf1f72a Devesh Sharma      2018-01-11  2243  	srq->rdev = rdev;
37cb11acf1f72a Devesh Sharma      2018-01-11  2244  	srq->qplib_srq.pd = &pd->qplib_pd;
37cb11acf1f72a Devesh Sharma      2018-01-11  2245  	srq->qplib_srq.dpi = &rdev->dpi_privileged;
37cb11acf1f72a Devesh Sharma      2018-01-11  2246  	/* Allocate 1 more than what's provided so posting max doesn't
37cb11acf1f72a Devesh Sharma      2018-01-11  2247  	 * mean empty
37cb11acf1f72a Devesh Sharma      2018-01-11  2248  	 */
2b2f078236a445 Leon Romanovsky    2026-03-18  2249  	srq->qplib_srq.max_wqe =
2b2f078236a445 Leon Romanovsky    2026-03-18  2250  		bnxt_re_init_depth(srq_init_attr->attr.max_wr + 1,
2b2f078236a445 Leon Romanovsky    2026-03-18  2251  				   dev_attr->max_srq_wqes + 1, uctx);
fddcbbb02af42a Devesh Sharma      2020-04-02  2252  
37cb11acf1f72a Devesh Sharma      2018-01-11  2253  	srq->qplib_srq.max_sge = srq_init_attr->attr.max_sge;
b898d5c50cab1f Selvin Xavier      2020-10-12  2254  	 /* 128 byte wqe size for SRQ . So use max sges */
b898d5c50cab1f Selvin Xavier      2020-10-12  2255  	srq->qplib_srq.wqe_size = bnxt_re_get_rwqe_size(dev_attr->max_srq_sges);
37cb11acf1f72a Devesh Sharma      2018-01-11  2256  	srq->qplib_srq.threshold = srq_init_attr->attr.srq_limit;
37cb11acf1f72a Devesh Sharma      2018-01-11  2257  	srq->srq_limit = srq_init_attr->attr.srq_limit;
30b871338c3eba Kalesh AP          2024-11-14  2258  	srq->qplib_srq.eventq_hw_ring_id = rdev->nqr->nq[0].ring_id;
b66535356a4834 Kashyap Desai      2025-02-22  2259  	srq->qplib_srq.sg_info.pgsize = PAGE_SIZE;
b66535356a4834 Kashyap Desai      2025-02-22  2260  	srq->qplib_srq.sg_info.pgshft = PAGE_SHIFT;
37cb11acf1f72a Devesh Sharma      2018-01-11  2261  
37cb11acf1f72a Devesh Sharma      2018-01-11  2262  	if (udata) {
37cb11acf1f72a Devesh Sharma      2018-01-11  2263  		rc = bnxt_re_init_user_srq(rdev, pd, srq, udata);
37cb11acf1f72a Devesh Sharma      2018-01-11  2264  		if (rc)
37cb11acf1f72a Devesh Sharma      2018-01-11  2265  			goto fail;
37cb11acf1f72a Devesh Sharma      2018-01-11  2266  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2267  
37cb11acf1f72a Devesh Sharma      2018-01-11  2268  	rc = bnxt_qplib_create_srq(&rdev->qplib_res, &srq->qplib_srq);
37cb11acf1f72a Devesh Sharma      2018-01-11  2269  	if (rc) {
6ccad8483b2866 Devesh Sharma      2020-02-15  2270  		ibdev_err(&rdev->ibdev, "Create HW SRQ failed!");
37cb11acf1f72a Devesh Sharma      2018-01-11  2271  		goto fail;
37cb11acf1f72a Devesh Sharma      2018-01-11  2272  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2273  
37cb11acf1f72a Devesh Sharma      2018-01-11  2274  	if (udata) {
181028a0d84cdc Chandramohan Akula 2024-08-29  2275  		struct bnxt_re_srq_resp resp = {};
37cb11acf1f72a Devesh Sharma      2018-01-11  2276  
37cb11acf1f72a Devesh Sharma      2018-01-11  2277  		resp.srqid = srq->qplib_srq.id;
181028a0d84cdc Chandramohan Akula 2024-08-29  2278  		if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT) {
181028a0d84cdc Chandramohan Akula 2024-08-29  2279  			srq->uctx_srq_page = (void *)get_zeroed_page(GFP_KERNEL);
181028a0d84cdc Chandramohan Akula 2024-08-29  2280  			if (!srq->uctx_srq_page) {
181028a0d84cdc Chandramohan Akula 2024-08-29  2281  				rc = -ENOMEM;
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2282  				goto fail_destroy_srq;
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2283  			}
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2284  			if (xa_is_err(xa_store(&uctx->srq_xa, srq->qplib_srq.id,
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2285  					       ib_srq->uobject, GFP_KERNEL))) {
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2286  				rc = -ENOMEM;
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2287  				goto fail_free_srq_page;
181028a0d84cdc Chandramohan Akula 2024-08-29  2288  			}
181028a0d84cdc Chandramohan Akula 2024-08-29  2289  			resp.comp_mask |= BNXT_RE_SRQ_TOGGLE_PAGE_SUPPORT;
181028a0d84cdc Chandramohan Akula 2024-08-29  2290  		}
bc30311e492ecf Jason Gunthorpe    2026-03-03  2291  		rc = ib_respond_udata(udata, resp);
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2292  		if (rc)
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2293  			goto fail_respond;
37cb11acf1f72a Devesh Sharma      2018-01-11  2294  	}
cb95709e0dca7a Chandramohan Akula 2023-07-26  2295  	active_srqs = atomic_inc_return(&rdev->stats.res.srq_count);
cb95709e0dca7a Chandramohan Akula 2023-07-26  2296  	if (active_srqs > rdev->stats.res.srq_watermark)
cb95709e0dca7a Chandramohan Akula 2023-07-26  2297  		rdev->stats.res.srq_watermark = active_srqs;
17f2569dce1848 Naresh Kumar PBS   2021-08-18  2298  	spin_lock_init(&srq->lock);
37cb11acf1f72a Devesh Sharma      2018-01-11  2299  
68e326dea1dba9 Leon Romanovsky    2019-04-03  2300  	return 0;
37cb11acf1f72a Devesh Sharma      2018-01-11  2301  
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2302  fail_respond:
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2303  	if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT) {
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2304  		xa_erase(&uctx->srq_xa, srq->qplib_srq.id);
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2305  		free_page((unsigned long)srq->uctx_srq_page);
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2306  	}
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2307  	bnxt_qplib_destroy_srq(&rdev->qplib_res, &srq->qplib_srq);
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2308  	goto fail;
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2309  fail_free_srq_page:
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2310  	free_page((unsigned long)srq->uctx_srq_page);
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2311  fail_destroy_srq:
2b248ac9c95bf0 Selvin Xavier      2026-07-21  2312  	bnxt_qplib_destroy_srq(&rdev->qplib_res, &srq->qplib_srq);
37cb11acf1f72a Devesh Sharma      2018-01-11  2313  fail:
37cb11acf1f72a Devesh Sharma      2018-01-11  2314  	ib_umem_release(srq->umem);
37cb11acf1f72a Devesh Sharma      2018-01-11  2315  exit:
68e326dea1dba9 Leon Romanovsky    2019-04-03  2316  	return rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2317  }
37cb11acf1f72a Devesh Sharma      2018-01-11  2318  
37cb11acf1f72a Devesh Sharma      2018-01-11 @2319  int bnxt_re_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr,
37cb11acf1f72a Devesh Sharma      2018-01-11  2320  		       enum ib_srq_attr_mask srq_attr_mask,
37cb11acf1f72a Devesh Sharma      2018-01-11  2321  		       struct ib_udata *udata)
37cb11acf1f72a Devesh Sharma      2018-01-11  2322  {
37cb11acf1f72a Devesh Sharma      2018-01-11  2323  	struct bnxt_re_srq *srq = container_of(ib_srq, struct bnxt_re_srq,
37cb11acf1f72a Devesh Sharma      2018-01-11  2324  					       ib_srq);
3f6b103c4bf25e Jason Gunthorpe    2026-03-03  2325  	int ret;
3f6b103c4bf25e Jason Gunthorpe    2026-03-03  2326  
d38c835925d4a3 Leon Romanovsky    2026-07-14  2327  	ret = ib_no_udata_io(udata);
3f6b103c4bf25e Jason Gunthorpe    2026-03-03  2328  	if (ret)
3f6b103c4bf25e Jason Gunthorpe    2026-03-03  2329  		return ret;
37cb11acf1f72a Devesh Sharma      2018-01-11  2330  
d38c835925d4a3 Leon Romanovsky    2026-07-14  2331  	if (srq_attr_mask != IB_SRQ_LIMIT)
3687b450c5f32e Kalesh AP          2024-01-22  2332  		return -EINVAL;
d38c835925d4a3 Leon Romanovsky    2026-07-14  2333  
37cb11acf1f72a Devesh Sharma      2018-01-11  2334  	if (srq_attr->srq_limit > srq->qplib_srq.max_wqe)
37cb11acf1f72a Devesh Sharma      2018-01-11  2335  		return -EINVAL;
37cb11acf1f72a Devesh Sharma      2018-01-11  2336  
37cb11acf1f72a Devesh Sharma      2018-01-11  2337  	srq->qplib_srq.threshold = srq_attr->srq_limit;
666bce0bd7e771 Kashyap Desai      2025-08-05  2338  	bnxt_qplib_srq_arm_db(&srq->qplib_srq.dbinfo, srq->qplib_srq.threshold);
666bce0bd7e771 Kashyap Desai      2025-08-05  2339  
37cb11acf1f72a Devesh Sharma      2018-01-11  2340  	/* On success, update the shadow */
37cb11acf1f72a Devesh Sharma      2018-01-11  2341  	srq->srq_limit = srq_attr->srq_limit;
37cb11acf1f72a Devesh Sharma      2018-01-11  2342  	/* No need to Build and send response back to udata */
d38c835925d4a3 Leon Romanovsky    2026-07-14  2343  	return 0;
37cb11acf1f72a Devesh Sharma      2018-01-11  2344  }
37cb11acf1f72a Devesh Sharma      2018-01-11  2345  
37cb11acf1f72a Devesh Sharma      2018-01-11 @2346  int bnxt_re_query_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr)
37cb11acf1f72a Devesh Sharma      2018-01-11  2347  {
37cb11acf1f72a Devesh Sharma      2018-01-11  2348  	struct bnxt_re_srq *srq = container_of(ib_srq, struct bnxt_re_srq,
37cb11acf1f72a Devesh Sharma      2018-01-11  2349  					       ib_srq);
37cb11acf1f72a Devesh Sharma      2018-01-11  2350  	struct bnxt_re_srq tsrq;
37cb11acf1f72a Devesh Sharma      2018-01-11  2351  	struct bnxt_re_dev *rdev = srq->rdev;
37cb11acf1f72a Devesh Sharma      2018-01-11  2352  	int rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2353  
37cb11acf1f72a Devesh Sharma      2018-01-11  2354  	/* Get live SRQ attr */
37cb11acf1f72a Devesh Sharma      2018-01-11  2355  	tsrq.qplib_srq.id = srq->qplib_srq.id;
37cb11acf1f72a Devesh Sharma      2018-01-11  2356  	rc = bnxt_qplib_query_srq(&rdev->qplib_res, &tsrq.qplib_srq);
37cb11acf1f72a Devesh Sharma      2018-01-11  2357  	if (rc) {
6ccad8483b2866 Devesh Sharma      2020-02-15  2358  		ibdev_err(&rdev->ibdev, "Query HW SRQ failed!");
37cb11acf1f72a Devesh Sharma      2018-01-11  2359  		return rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2360  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2361  	srq_attr->max_wr = srq->qplib_srq.max_wqe;
37cb11acf1f72a Devesh Sharma      2018-01-11  2362  	srq_attr->max_sge = srq->qplib_srq.max_sge;
37cb11acf1f72a Devesh Sharma      2018-01-11  2363  	srq_attr->srq_limit = tsrq.qplib_srq.threshold;
37cb11acf1f72a Devesh Sharma      2018-01-11  2364  
37cb11acf1f72a Devesh Sharma      2018-01-11  2365  	return 0;
37cb11acf1f72a Devesh Sharma      2018-01-11  2366  }
37cb11acf1f72a Devesh Sharma      2018-01-11  2367  
d34ac5cd3a73aa Bart Van Assche    2018-07-18 @2368  int bnxt_re_post_srq_recv(struct ib_srq *ib_srq, const struct ib_recv_wr *wr,
d34ac5cd3a73aa Bart Van Assche    2018-07-18  2369  			  const struct ib_recv_wr **bad_wr)
37cb11acf1f72a Devesh Sharma      2018-01-11  2370  {
37cb11acf1f72a Devesh Sharma      2018-01-11  2371  	struct bnxt_re_srq *srq = container_of(ib_srq, struct bnxt_re_srq,
37cb11acf1f72a Devesh Sharma      2018-01-11  2372  					       ib_srq);
37cb11acf1f72a Devesh Sharma      2018-01-11  2373  	struct bnxt_qplib_swqe wqe;
37cb11acf1f72a Devesh Sharma      2018-01-11  2374  	unsigned long flags;
036ef0a1a86751 Bart Van Assche    2018-03-07  2375  	int rc = 0;
37cb11acf1f72a Devesh Sharma      2018-01-11  2376  
37cb11acf1f72a Devesh Sharma      2018-01-11  2377  	spin_lock_irqsave(&srq->lock, flags);
37cb11acf1f72a Devesh Sharma      2018-01-11  2378  	while (wr) {
37cb11acf1f72a Devesh Sharma      2018-01-11  2379  		/* Transcribe each ib_recv_wr to qplib_swqe */
37cb11acf1f72a Devesh Sharma      2018-01-11  2380  		wqe.num_sge = wr->num_sge;
036ef0a1a86751 Bart Van Assche    2018-03-07  2381  		bnxt_re_build_sgl(wr->sg_list, wqe.sg_list, wr->num_sge);
37cb11acf1f72a Devesh Sharma      2018-01-11  2382  		wqe.wr_id = wr->wr_id;
37cb11acf1f72a Devesh Sharma      2018-01-11  2383  		wqe.type = BNXT_QPLIB_SWQE_TYPE_RECV;
37cb11acf1f72a Devesh Sharma      2018-01-11  2384  
37cb11acf1f72a Devesh Sharma      2018-01-11  2385  		rc = bnxt_qplib_post_srq_recv(&srq->qplib_srq, &wqe);
37cb11acf1f72a Devesh Sharma      2018-01-11  2386  		if (rc) {
37cb11acf1f72a Devesh Sharma      2018-01-11  2387  			*bad_wr = wr;
37cb11acf1f72a Devesh Sharma      2018-01-11  2388  			break;
37cb11acf1f72a Devesh Sharma      2018-01-11  2389  		}
37cb11acf1f72a Devesh Sharma      2018-01-11  2390  		wr = wr->next;
37cb11acf1f72a Devesh Sharma      2018-01-11  2391  	}
37cb11acf1f72a Devesh Sharma      2018-01-11  2392  	spin_unlock_irqrestore(&srq->lock, flags);
37cb11acf1f72a Devesh Sharma      2018-01-11  2393  
37cb11acf1f72a Devesh Sharma      2018-01-11  2394  	return rc;
37cb11acf1f72a Devesh Sharma      2018-01-11  2395  }
1ac5a404797523 Selvin Xavier      2017-02-10  2396  static int bnxt_re_modify_shadow_qp(struct bnxt_re_dev *rdev,
1ac5a404797523 Selvin Xavier      2017-02-10  2397  				    struct bnxt_re_qp *qp1_qp,
1ac5a404797523 Selvin Xavier      2017-02-10  2398  				    int qp_attr_mask)
1ac5a404797523 Selvin Xavier      2017-02-10  2399  {
8dae419f9ec730 Devesh Sharma      2020-02-15  2400  	struct bnxt_re_qp *qp = rdev->gsi_ctx.gsi_sqp;
14611b9b984125 Kalesh AP          2023-08-03  2401  	int rc;
1ac5a404797523 Selvin Xavier      2017-02-10  2402  
1ac5a404797523 Selvin Xavier      2017-02-10  2403  	if (qp_attr_mask & IB_QP_STATE) {
1ac5a404797523 Selvin Xavier      2017-02-10  2404  		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_STATE;
1ac5a404797523 Selvin Xavier      2017-02-10  2405  		qp->qplib_qp.state = qp1_qp->qplib_qp.state;
1ac5a404797523 Selvin Xavier      2017-02-10  2406  	}
1ac5a404797523 Selvin Xavier      2017-02-10  2407  	if (qp_attr_mask & IB_QP_PKEY_INDEX) {
1ac5a404797523 Selvin Xavier      2017-02-10  2408  		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_PKEY;
1ac5a404797523 Selvin Xavier      2017-02-10  2409  		qp->qplib_qp.pkey_index = qp1_qp->qplib_qp.pkey_index;
1ac5a404797523 Selvin Xavier      2017-02-10  2410  	}
1ac5a404797523 Selvin Xavier      2017-02-10  2411  
1ac5a404797523 Selvin Xavier      2017-02-10  2412  	if (qp_attr_mask & IB_QP_QKEY) {
1ac5a404797523 Selvin Xavier      2017-02-10  2413  		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_QKEY;
1ac5a404797523 Selvin Xavier      2017-02-10  2414  		/* Using a Random  QKEY */
1ac5a404797523 Selvin Xavier      2017-02-10  2415  		qp->qplib_qp.qkey = 0x81818181;
1ac5a404797523 Selvin Xavier      2017-02-10  2416  	}
1ac5a404797523 Selvin Xavier      2017-02-10  2417  	if (qp_attr_mask & IB_QP_SQ_PSN) {
1ac5a404797523 Selvin Xavier      2017-02-10  2418  		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_SQ_PSN;
1ac5a404797523 Selvin Xavier      2017-02-10  2419  		qp->qplib_qp.sq.psn = qp1_qp->qplib_qp.sq.psn;
1ac5a404797523 Selvin Xavier      2017-02-10  2420  	}
1ac5a404797523 Selvin Xavier      2017-02-10  2421  
1ac5a404797523 Selvin Xavier      2017-02-10  2422  	rc = bnxt_qplib_modify_qp(&rdev->qplib_res, &qp->qplib_qp);
1ac5a404797523 Selvin Xavier      2017-02-10  2423  	if (rc)
6ccad8483b2866 Devesh Sharma      2020-02-15  2424  		ibdev_err(&rdev->ibdev, "Failed to modify Shadow QP for QP1");
1ac5a404797523 Selvin Xavier      2017-02-10  2425  	return rc;
1ac5a404797523 Selvin Xavier      2017-02-10  2426  }
1ac5a404797523 Selvin Xavier      2017-02-10  2427  

:::::: The code at line 2178 was first introduced by commit
:::::: 37cb11acf1f72a007a85894a6dd2ec93932bde46 RDMA/bnxt_re: Add SRQ support for Broadcom adapters

:::::: TO: Devesh Sharma <[email protected]>
:::::: CC: Doug Ledford <[email protected]>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki