Lines Matching refs:srq
11 #include "srq.h"
15 * rvt_driver_srq_init - init srq resources on a per driver basis
38 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
54 srq->rq.size = srq_init_attr->attr.max_wr + 1;
55 srq->rq.max_sge = srq_init_attr->attr.max_sge;
56 sz = sizeof(struct ib_sge) * srq->rq.max_sge +
58 if (rvt_alloc_rq(&srq->rq, srq->rq.size * sz,
69 u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz;
71 srq->ip = rvt_create_mmap_info(dev, s, udata, srq->rq.wq);
72 if (IS_ERR(srq->ip)) {
73 ret = PTR_ERR(srq->ip);
77 ret = ib_copy_to_udata(udata, &srq->ip->offset,
78 sizeof(srq->ip->offset));
84 * ib_create_srq() will initialize srq->ibsrq.
86 spin_lock_init(&srq->rq.lock);
87 srq->limit = srq_init_attr->attr.srq_limit;
99 if (srq->ip) {
101 list_add(&srq->ip->pending_mmaps, &dev->pending_mmaps);
108 kfree(srq->ip);
110 rvt_free_rq(&srq->rq);
128 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
142 attr->srq_limit : srq->limit) > attr->max_wr)
145 srq->rq.max_sge * sizeof(struct ib_sge);
167 spin_lock_irq(&srq->rq.kwq->c_lock);
173 owq = srq->rq.wq;
177 okwq = srq->rq.kwq;
181 if (head >= srq->rq.size || tail >= srq->rq.size) {
187 n += srq->rq.size - tail;
200 wqe = rvt_get_rwqe_ptr(&srq->rq, tail);
207 if (++tail >= srq->rq.size)
210 srq->rq.kwq = tmp_rq.kwq;
212 srq->rq.wq = tmp_rq.wq;
219 srq->rq.size = size;
221 srq->limit = attr->srq_limit;
222 spin_unlock_irq(&srq->rq.kwq->c_lock);
227 if (srq->ip) {
228 struct rvt_mmap_info *ip = srq->ip;
229 struct rvt_dev_info *dev = ib_to_rvt(srq->ibsrq.device);
256 spin_lock_irq(&srq->rq.kwq->c_lock);
257 if (attr->srq_limit >= srq->rq.size)
260 srq->limit = attr->srq_limit;
261 spin_unlock_irq(&srq->rq.kwq->c_lock);
266 spin_unlock_irq(&srq->rq.kwq->c_lock);
273 * rvt_query_srq - query srq data
274 * @ibsrq: srq to query
281 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
283 attr->max_wr = srq->rq.size - 1;
284 attr->max_sge = srq->rq.max_sge;
285 attr->srq_limit = srq->limit;
290 * rvt_destroy_srq - destory an srq
291 * @ibsrq: srq object to destroy
296 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
302 if (srq->ip)
303 kref_put(&srq->ip->ref, rvt_release_mmap_info);
304 kvfree(srq->rq.kwq);