Lines Matching refs:srq
1191 if (!attrs->srq && (attrs->cap.max_recv_wr > dev->attr.max_rqe)) { in ocrdma_check_qp_params()
1246 int dpp_credit_lmt, int srq) in ocrdma_copy_qp_uresp() argument
1263 if (!srq) { in ocrdma_copy_qp_uresp()
1290 if (!srq) { in ocrdma_copy_qp_uresp()
1417 (attrs->srq != NULL)); in ocrdma_create_qp()
1617 static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, unsigned int idx) in ocrdma_srq_toggle_bit() argument
1622 srq->idx_bit_fields[i] ^= mask; in ocrdma_srq_toggle_bit()
1684 if (is_hw_sq_empty(qp) && (!qp->srq && is_hw_rq_empty(qp))) in ocrdma_discard_cqes()
1701 if (qp->srq) { in ocrdma_discard_cqes()
1704 qp->srq->rq.max_wqe_idx; in ocrdma_discard_cqes()
1706 spin_lock_irqsave(&qp->srq->q_lock, flags); in ocrdma_discard_cqes()
1707 ocrdma_hwq_inc_tail(&qp->srq->rq); in ocrdma_discard_cqes()
1708 ocrdma_srq_toggle_bit(qp->srq, wqe_idx - 1); in ocrdma_discard_cqes()
1709 spin_unlock_irqrestore(&qp->srq->q_lock, flags); in ocrdma_discard_cqes()
1737 if (!qp->srq) { in ocrdma_del_flush_qp()
1795 if (!qp->srq) in ocrdma_destroy_qp()
1808 static int ocrdma_copy_srq_uresp(struct ocrdma_dev *dev, struct ocrdma_srq *srq, in ocrdma_copy_srq_uresp() argument
1815 uresp.rq_dbid = srq->rq.dbid; in ocrdma_copy_srq_uresp()
1817 uresp.rq_page_addr[0] = virt_to_phys(srq->rq.va); in ocrdma_copy_srq_uresp()
1818 uresp.rq_page_size = srq->rq.len; in ocrdma_copy_srq_uresp()
1820 (srq->pd->id * dev->nic_info.db_page_size); in ocrdma_copy_srq_uresp()
1822 uresp.num_rqe_allocated = srq->rq.max_cnt; in ocrdma_copy_srq_uresp()
1834 status = ocrdma_add_mmap(srq->pd->uctx, uresp.rq_page_addr[0], in ocrdma_copy_srq_uresp()
1848 struct ocrdma_srq *srq; in ocrdma_create_srq() local
1855 srq = kzalloc(sizeof(*srq), GFP_KERNEL); in ocrdma_create_srq()
1856 if (!srq) in ocrdma_create_srq()
1859 spin_lock_init(&srq->q_lock); in ocrdma_create_srq()
1860 srq->pd = pd; in ocrdma_create_srq()
1861 srq->db = dev->nic_info.db + (pd->id * dev->nic_info.db_page_size); in ocrdma_create_srq()
1862 status = ocrdma_mbx_create_srq(dev, srq, init_attr, pd); in ocrdma_create_srq()
1868 srq->rqe_wr_id_tbl = kcalloc(srq->rq.max_cnt, sizeof(u64), in ocrdma_create_srq()
1870 if (srq->rqe_wr_id_tbl == NULL) in ocrdma_create_srq()
1873 srq->bit_fields_len = (srq->rq.max_cnt / 32) + in ocrdma_create_srq()
1874 (srq->rq.max_cnt % 32 ? 1 : 0); in ocrdma_create_srq()
1875 srq->idx_bit_fields = in ocrdma_create_srq()
1876 kmalloc_array(srq->bit_fields_len, sizeof(u32), in ocrdma_create_srq()
1878 if (srq->idx_bit_fields == NULL) in ocrdma_create_srq()
1880 memset(srq->idx_bit_fields, 0xff, in ocrdma_create_srq()
1881 srq->bit_fields_len * sizeof(u32)); in ocrdma_create_srq()
1885 status = ocrdma_mbx_modify_srq(srq, &init_attr->attr); in ocrdma_create_srq()
1891 status = ocrdma_copy_srq_uresp(dev, srq, udata); in ocrdma_create_srq()
1896 return &srq->ibsrq; in ocrdma_create_srq()
1899 ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_create_srq()
1901 kfree(srq->rqe_wr_id_tbl); in ocrdma_create_srq()
1902 kfree(srq->idx_bit_fields); in ocrdma_create_srq()
1903 kfree(srq); in ocrdma_create_srq()
1913 struct ocrdma_srq *srq; in ocrdma_modify_srq() local
1915 srq = get_ocrdma_srq(ibsrq); in ocrdma_modify_srq()
1919 status = ocrdma_mbx_modify_srq(srq, srq_attr); in ocrdma_modify_srq()
1926 struct ocrdma_srq *srq; in ocrdma_query_srq() local
1928 srq = get_ocrdma_srq(ibsrq); in ocrdma_query_srq()
1929 status = ocrdma_mbx_query_srq(srq, srq_attr); in ocrdma_query_srq()
1936 struct ocrdma_srq *srq; in ocrdma_destroy_srq() local
1939 srq = get_ocrdma_srq(ibsrq); in ocrdma_destroy_srq()
1941 status = ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_destroy_srq()
1943 if (srq->pd->uctx) in ocrdma_destroy_srq()
1944 ocrdma_del_mmap(srq->pd->uctx, (u64) srq->rq.pa, in ocrdma_destroy_srq()
1945 PAGE_ALIGN(srq->rq.len)); in ocrdma_destroy_srq()
1947 kfree(srq->idx_bit_fields); in ocrdma_destroy_srq()
1948 kfree(srq->rqe_wr_id_tbl); in ocrdma_destroy_srq()
1949 kfree(srq); in ocrdma_destroy_srq()
2346 static int ocrdma_srq_get_idx(struct ocrdma_srq *srq) in ocrdma_srq_get_idx() argument
2351 for (row = 0; row < srq->bit_fields_len; row++) { in ocrdma_srq_get_idx()
2352 if (srq->idx_bit_fields[row]) { in ocrdma_srq_get_idx()
2353 indx = ffs(srq->idx_bit_fields[row]); in ocrdma_srq_get_idx()
2355 BUG_ON(indx >= srq->rq.max_cnt); in ocrdma_srq_get_idx()
2356 ocrdma_srq_toggle_bit(srq, indx); in ocrdma_srq_get_idx()
2361 BUG_ON(row == srq->bit_fields_len); in ocrdma_srq_get_idx()
2365 static void ocrdma_ring_srq_db(struct ocrdma_srq *srq) in ocrdma_ring_srq_db() argument
2367 u32 val = srq->rq.dbid | (1 << 16); in ocrdma_ring_srq_db()
2369 iowrite32(val, srq->db + OCRDMA_DB_GEN2_SRQ_OFFSET); in ocrdma_ring_srq_db()
2377 struct ocrdma_srq *srq; in ocrdma_post_srq_recv() local
2381 srq = get_ocrdma_srq(ibsrq); in ocrdma_post_srq_recv()
2383 spin_lock_irqsave(&srq->q_lock, flags); in ocrdma_post_srq_recv()
2385 if (ocrdma_hwq_free_cnt(&srq->rq) == 0 || in ocrdma_post_srq_recv()
2386 wr->num_sge > srq->rq.max_sges) { in ocrdma_post_srq_recv()
2391 tag = ocrdma_srq_get_idx(srq); in ocrdma_post_srq_recv()
2392 rqe = ocrdma_hwq_head(&srq->rq); in ocrdma_post_srq_recv()
2395 srq->rqe_wr_id_tbl[tag] = wr->wr_id; in ocrdma_post_srq_recv()
2399 ocrdma_ring_srq_db(srq); in ocrdma_post_srq_recv()
2401 ocrdma_hwq_inc_head(&srq->rq); in ocrdma_post_srq_recv()
2404 spin_unlock_irqrestore(&srq->q_lock, flags); in ocrdma_post_srq_recv()
2613 if (!qp->srq && (qp->sq_cq == qp->rq_cq)) { in ocrdma_poll_err_scqe()
2713 struct ocrdma_srq *srq; in ocrdma_update_free_srq_cqe() local
2716 srq = get_ocrdma_srq(qp->ibqp.srq); in ocrdma_update_free_srq_cqe()
2718 OCRDMA_CQE_BUFTAG_SHIFT) & srq->rq.max_wqe_idx; in ocrdma_update_free_srq_cqe()
2721 ibwc->wr_id = srq->rqe_wr_id_tbl[wqe_idx]; in ocrdma_update_free_srq_cqe()
2722 spin_lock_irqsave(&srq->q_lock, flags); in ocrdma_update_free_srq_cqe()
2723 ocrdma_srq_toggle_bit(srq, wqe_idx - 1); in ocrdma_update_free_srq_cqe()
2724 spin_unlock_irqrestore(&srq->q_lock, flags); in ocrdma_update_free_srq_cqe()
2725 ocrdma_hwq_inc_tail(&srq->rq); in ocrdma_update_free_srq_cqe()
2742 if (!qp->srq && (qp->sq_cq == qp->rq_cq)) { in ocrdma_poll_err_rcqe()
2789 if (qp->ibqp.srq) { in ocrdma_poll_success_rcqe()