Lines Matching refs:srq
80 struct rvt_srq *srq; in rvt_create_srq() local
93 srq = kzalloc_node(sizeof(*srq), GFP_KERNEL, dev->dparms.node); in rvt_create_srq()
94 if (!srq) in rvt_create_srq()
100 srq->rq.size = srq_init_attr->attr.max_wr + 1; in rvt_create_srq()
101 srq->rq.max_sge = srq_init_attr->attr.max_sge; in rvt_create_srq()
102 sz = sizeof(struct ib_sge) * srq->rq.max_sge + in rvt_create_srq()
104 srq->rq.wq = udata ? in rvt_create_srq()
105 vmalloc_user(sizeof(struct rvt_rwq) + srq->rq.size * sz) : in rvt_create_srq()
106 vzalloc_node(sizeof(struct rvt_rwq) + srq->rq.size * sz, in rvt_create_srq()
108 if (!srq->rq.wq) { in rvt_create_srq()
119 u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz; in rvt_create_srq()
121 srq->ip = in rvt_create_srq()
123 srq->rq.wq); in rvt_create_srq()
124 if (!srq->ip) { in rvt_create_srq()
129 err = ib_copy_to_udata(udata, &srq->ip->offset, in rvt_create_srq()
130 sizeof(srq->ip->offset)); in rvt_create_srq()
140 spin_lock_init(&srq->rq.lock); in rvt_create_srq()
141 srq->limit = srq_init_attr->attr.srq_limit; in rvt_create_srq()
153 if (srq->ip) { in rvt_create_srq()
155 list_add(&srq->ip->pending_mmaps, &dev->pending_mmaps); in rvt_create_srq()
159 return &srq->ibsrq; in rvt_create_srq()
162 kfree(srq->ip); in rvt_create_srq()
164 vfree(srq->rq.wq); in rvt_create_srq()
166 kfree(srq); in rvt_create_srq()
183 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq); in rvt_modify_srq() local
196 attr->srq_limit : srq->limit) > attr->max_wr) in rvt_modify_srq()
200 srq->rq.max_sge * sizeof(struct ib_sge); in rvt_modify_srq()
226 spin_lock_irq(&srq->rq.lock); in rvt_modify_srq()
231 owq = srq->rq.wq; in rvt_modify_srq()
234 if (head >= srq->rq.size || tail >= srq->rq.size) { in rvt_modify_srq()
240 n += srq->rq.size - tail; in rvt_modify_srq()
253 wqe = rvt_get_rwqe_ptr(&srq->rq, tail); in rvt_modify_srq()
260 if (++tail >= srq->rq.size) in rvt_modify_srq()
263 srq->rq.wq = wq; in rvt_modify_srq()
264 srq->rq.size = size; in rvt_modify_srq()
268 srq->limit = attr->srq_limit; in rvt_modify_srq()
269 spin_unlock_irq(&srq->rq.lock); in rvt_modify_srq()
273 if (srq->ip) { in rvt_modify_srq()
274 struct rvt_mmap_info *ip = srq->ip; in rvt_modify_srq()
275 struct rvt_dev_info *dev = ib_to_rvt(srq->ibsrq.device); in rvt_modify_srq()
302 spin_lock_irq(&srq->rq.lock); in rvt_modify_srq()
303 if (attr->srq_limit >= srq->rq.size) in rvt_modify_srq()
306 srq->limit = attr->srq_limit; in rvt_modify_srq()
307 spin_unlock_irq(&srq->rq.lock); in rvt_modify_srq()
312 spin_unlock_irq(&srq->rq.lock); in rvt_modify_srq()
326 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq); in rvt_query_srq() local
328 attr->max_wr = srq->rq.size - 1; in rvt_query_srq()
329 attr->max_sge = srq->rq.max_sge; in rvt_query_srq()
330 attr->srq_limit = srq->limit; in rvt_query_srq()
342 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq); in rvt_destroy_srq() local
348 if (srq->ip) in rvt_destroy_srq()
349 kref_put(&srq->ip->ref, rvt_release_mmap_info); in rvt_destroy_srq()
351 vfree(srq->rq.wq); in rvt_destroy_srq()
352 kfree(srq); in rvt_destroy_srq()