Lines Matching refs:ctxt

87  * from rqstp::rq_pages into ctxt::pages. The consumed elements of
130 struct svc_rdma_recv_ctxt *ctxt;
134 ctxt = kmalloc(sizeof(*ctxt), GFP_KERNEL);
135 if (!ctxt)
145 svc_rdma_recv_cid_init(rdma, &ctxt->rc_cid);
147 ctxt->rc_recv_wr.next = NULL;
148 ctxt->rc_recv_wr.wr_cqe = &ctxt->rc_cqe;
149 ctxt->rc_recv_wr.sg_list = &ctxt->rc_recv_sge;
150 ctxt->rc_recv_wr.num_sge = 1;
151 ctxt->rc_cqe.done = svc_rdma_wc_receive;
152 ctxt->rc_recv_sge.addr = addr;
153 ctxt->rc_recv_sge.length = rdma->sc_max_req_size;
154 ctxt->rc_recv_sge.lkey = rdma->sc_pd->local_dma_lkey;
155 ctxt->rc_recv_buf = buffer;
156 ctxt->rc_temp = false;
157 return ctxt;
162 kfree(ctxt);
168 struct svc_rdma_recv_ctxt *ctxt)
170 ib_dma_unmap_single(rdma->sc_pd->device, ctxt->rc_recv_sge.addr,
171 ctxt->rc_recv_sge.length, DMA_FROM_DEVICE);
172 kfree(ctxt->rc_recv_buf);
173 kfree(ctxt);
183 struct svc_rdma_recv_ctxt *ctxt;
187 ctxt = llist_entry(node, struct svc_rdma_recv_ctxt, rc_node);
188 svc_rdma_recv_ctxt_destroy(rdma, ctxt);
195 struct svc_rdma_recv_ctxt *ctxt;
201 ctxt = llist_entry(node, struct svc_rdma_recv_ctxt, rc_node);
204 ctxt->rc_page_count = 0;
205 ctxt->rc_read_payload_length = 0;
206 return ctxt;
209 ctxt = svc_rdma_recv_ctxt_alloc(rdma);
210 if (!ctxt)
218 * @ctxt: object to return to the free list
222 struct svc_rdma_recv_ctxt *ctxt)
226 for (i = 0; i < ctxt->rc_page_count; i++)
227 put_page(ctxt->rc_pages[i]);
229 if (!ctxt->rc_temp)
230 llist_add(&ctxt->rc_node, &rdma->sc_recv_ctxts);
232 svc_rdma_recv_ctxt_destroy(rdma, ctxt);
245 struct svc_rdma_recv_ctxt *ctxt = rqstp->rq_xprt_ctxt;
251 if (ctxt)
252 svc_rdma_recv_ctxt_put(rdma, ctxt);
256 struct svc_rdma_recv_ctxt *ctxt)
260 trace_svcrdma_post_recv(ctxt);
261 ret = ib_post_recv(rdma->sc_qp, &ctxt->rc_recv_wr, NULL);
268 svc_rdma_recv_ctxt_put(rdma, ctxt);
274 struct svc_rdma_recv_ctxt *ctxt;
278 ctxt = svc_rdma_recv_ctxt_get(rdma);
279 if (!ctxt)
281 return __svc_rdma_post_recv(rdma, ctxt);
292 struct svc_rdma_recv_ctxt *ctxt;
297 ctxt = svc_rdma_recv_ctxt_get(rdma);
298 if (!ctxt)
300 ctxt->rc_temp = true;
301 ret = __svc_rdma_post_recv(rdma, ctxt);
320 struct svc_rdma_recv_ctxt *ctxt;
323 ctxt = container_of(cqe, struct svc_rdma_recv_ctxt, rc_cqe);
325 trace_svcrdma_wc_receive(wc, &ctxt->rc_cid);
333 ctxt->rc_byte_len = wc->byte_len;
335 ctxt->rc_recv_sge.addr,
339 list_add_tail(&ctxt->rc_list, &rdma->sc_rq_dto_q);
349 svc_rdma_recv_ctxt_put(rdma, ctxt);
361 struct svc_rdma_recv_ctxt *ctxt;
363 while ((ctxt = svc_rdma_next_recv_ctxt(&rdma->sc_read_complete_q))) {
364 list_del(&ctxt->rc_list);
365 svc_rdma_recv_ctxt_put(rdma, ctxt);
367 while ((ctxt = svc_rdma_next_recv_ctxt(&rdma->sc_rq_dto_q))) {
368 list_del(&ctxt->rc_list);
369 svc_rdma_recv_ctxt_put(rdma, ctxt);
374 struct svc_rdma_recv_ctxt *ctxt)
378 arg->head[0].iov_base = ctxt->rc_recv_buf;
379 arg->head[0].iov_len = ctxt->rc_byte_len;
384 arg->buflen = ctxt->rc_byte_len;
385 arg->len = ctxt->rc_byte_len;
560 struct svc_rdma_recv_ctxt *ctxt)
565 ctxt->rc_inv_rkey = 0;
571 p = ctxt->rc_recv_buf;
608 ctxt->rc_inv_rkey = be32_to_cpu(inv_rkey);
780 * when there are no remaining ctxt's to process.
782 * The next ctxt is removed from the "receive" lists.
784 * - If the ctxt completes a Read, then finish assembling the Call
787 * - If the ctxt completes a Receive, then construct the Call
802 struct svc_rdma_recv_ctxt *ctxt;
809 ctxt = svc_rdma_next_recv_ctxt(&rdma_xprt->sc_read_complete_q);
810 if (ctxt) {
811 list_del(&ctxt->rc_list);
813 rdma_read_complete(rqstp, ctxt);
816 ctxt = svc_rdma_next_recv_ctxt(&rdma_xprt->sc_rq_dto_q);
817 if (!ctxt) {
823 list_del(&ctxt->rc_list);
828 svc_rdma_build_arg_xdr(rqstp, ctxt);
837 ret = svc_rdma_xdr_decode_req(&rqstp->rq_arg, ctxt);
847 svc_rdma_get_inv_rkey(rdma_xprt, ctxt);
854 rqstp->rq_xprt_ctxt = ctxt;
860 ret = svc_rdma_recv_read_chunk(rdma_xprt, rqstp, ctxt, p);
866 svc_rdma_send_error(rdma_xprt, ctxt, ret);
867 svc_rdma_recv_ctxt_put(rdma_xprt, ctxt);
872 svc_rdma_send_error(rdma_xprt, ctxt, ret);
873 svc_rdma_recv_ctxt_put(rdma_xprt, ctxt);
877 svc_rdma_handle_bc_reply(rqstp, ctxt);
879 svc_rdma_recv_ctxt_put(rdma_xprt, ctxt);