Lines Matching refs:newxprt

224 svc_rdma_parse_connect_private(struct svcxprt_rdma *newxprt,  in svc_rdma_parse_connect_private()  argument
232 newxprt->sc_snd_w_inv = pmsg->cp_flags & in svc_rdma_parse_connect_private()
239 newxprt->sc_snd_w_inv ? "" : "un"); in svc_rdma_parse_connect_private()
258 struct svcxprt_rdma *newxprt; in handle_connect_req() local
262 newxprt = svc_rdma_create_xprt(listen_xprt->sc_xprt.xpt_server, in handle_connect_req()
264 if (!newxprt) in handle_connect_req()
266 newxprt->sc_cm_id = new_cma_id; in handle_connect_req()
267 new_cma_id->context = newxprt; in handle_connect_req()
268 svc_rdma_parse_connect_private(newxprt, param); in handle_connect_req()
271 newxprt->sc_ord = param->initiator_depth; in handle_connect_req()
274 sa = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr; in handle_connect_req()
275 svc_xprt_set_remote(&newxprt->sc_xprt, sa, svc_addr_len(sa)); in handle_connect_req()
276 sa = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr; in handle_connect_req()
277 svc_xprt_set_local(&newxprt->sc_xprt, sa, svc_addr_len(sa)); in handle_connect_req()
284 list_add_tail(&newxprt->sc_accept_q, &listen_xprt->sc_accept_q); in handle_connect_req()
446 struct svcxprt_rdma *newxprt = NULL; in svc_rdma_accept() local
460 newxprt = list_entry(listen_rdma->sc_accept_q.next, in svc_rdma_accept()
462 list_del_init(&newxprt->sc_accept_q); in svc_rdma_accept()
467 if (!newxprt) in svc_rdma_accept()
471 newxprt, newxprt->sc_cm_id); in svc_rdma_accept()
473 dev = newxprt->sc_cm_id->device; in svc_rdma_accept()
474 newxprt->sc_port_num = newxprt->sc_cm_id->port_num; in svc_rdma_accept()
478 newxprt->sc_max_send_sges = dev->attrs.max_send_sge; in svc_rdma_accept()
480 if (newxprt->sc_max_send_sges < 4) { in svc_rdma_accept()
482 newxprt->sc_max_send_sges); in svc_rdma_accept()
485 newxprt->sc_max_req_size = svcrdma_max_req_size; in svc_rdma_accept()
486 newxprt->sc_max_requests = svcrdma_max_requests; in svc_rdma_accept()
487 newxprt->sc_max_bc_requests = svcrdma_max_bc_requests; in svc_rdma_accept()
488 rq_depth = newxprt->sc_max_requests + newxprt->sc_max_bc_requests; in svc_rdma_accept()
493 newxprt->sc_max_requests = rq_depth - 2; in svc_rdma_accept()
494 newxprt->sc_max_bc_requests = 2; in svc_rdma_accept()
496 newxprt->sc_fc_credits = cpu_to_be32(newxprt->sc_max_requests); in svc_rdma_accept()
497 ctxts = rdma_rw_mr_factor(dev, newxprt->sc_port_num, RPCSVC_MAXPAGES); in svc_rdma_accept()
498 ctxts *= newxprt->sc_max_requests; in svc_rdma_accept()
499 newxprt->sc_sq_depth = rq_depth + ctxts; in svc_rdma_accept()
500 if (newxprt->sc_sq_depth > dev->attrs.max_qp_wr) { in svc_rdma_accept()
503 newxprt->sc_sq_depth = dev->attrs.max_qp_wr; in svc_rdma_accept()
505 atomic_set(&newxprt->sc_sq_avail, newxprt->sc_sq_depth); in svc_rdma_accept()
507 newxprt->sc_pd = ib_alloc_pd(dev, 0); in svc_rdma_accept()
508 if (IS_ERR(newxprt->sc_pd)) { in svc_rdma_accept()
512 newxprt->sc_sq_cq = ib_alloc_cq(dev, newxprt, newxprt->sc_sq_depth, in svc_rdma_accept()
514 if (IS_ERR(newxprt->sc_sq_cq)) { in svc_rdma_accept()
518 newxprt->sc_rq_cq = ib_alloc_cq(dev, newxprt, rq_depth, in svc_rdma_accept()
520 if (IS_ERR(newxprt->sc_rq_cq)) { in svc_rdma_accept()
527 qp_attr.qp_context = &newxprt->sc_xprt; in svc_rdma_accept()
528 qp_attr.port_num = newxprt->sc_port_num; in svc_rdma_accept()
530 qp_attr.cap.max_send_wr = newxprt->sc_sq_depth - ctxts; in svc_rdma_accept()
532 qp_attr.cap.max_send_sge = newxprt->sc_max_send_sges; in svc_rdma_accept()
536 qp_attr.send_cq = newxprt->sc_sq_cq; in svc_rdma_accept()
537 qp_attr.recv_cq = newxprt->sc_rq_cq; in svc_rdma_accept()
539 newxprt->sc_cm_id, newxprt->sc_pd); in svc_rdma_accept()
545 ret = rdma_create_qp(newxprt->sc_cm_id, newxprt->sc_pd, &qp_attr); in svc_rdma_accept()
550 newxprt->sc_qp = newxprt->sc_cm_id->qp; in svc_rdma_accept()
553 newxprt->sc_snd_w_inv = false; in svc_rdma_accept()
554 if (!rdma_protocol_iwarp(dev, newxprt->sc_port_num) && in svc_rdma_accept()
555 !rdma_ib_or_roce(dev, newxprt->sc_port_num)) in svc_rdma_accept()
558 if (!svc_rdma_post_recvs(newxprt)) in svc_rdma_accept()
562 newxprt->sc_cm_id->event_handler = rdma_cma_handler; in svc_rdma_accept()
569 rpcrdma_encode_buffer_size(newxprt->sc_max_req_size); in svc_rdma_accept()
572 set_bit(RDMAXPRT_CONN_PENDING, &newxprt->sc_flags); in svc_rdma_accept()
575 conn_param.initiator_depth = min_t(int, newxprt->sc_ord, in svc_rdma_accept()
584 ret = rdma_accept(newxprt->sc_cm_id, &conn_param); in svc_rdma_accept()
588 dprintk("svcrdma: new connection %p accepted:\n", newxprt); in svc_rdma_accept()
589 sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr; in svc_rdma_accept()
591 sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr; in svc_rdma_accept()
593 dprintk(" max_sge : %d\n", newxprt->sc_max_send_sges); in svc_rdma_accept()
594 dprintk(" sq_depth : %d\n", newxprt->sc_sq_depth); in svc_rdma_accept()
596 dprintk(" max_requests : %d\n", newxprt->sc_max_requests); in svc_rdma_accept()
599 trace_svcrdma_xprt_accept(&newxprt->sc_xprt); in svc_rdma_accept()
600 return &newxprt->sc_xprt; in svc_rdma_accept()
604 trace_svcrdma_xprt_fail(&newxprt->sc_xprt); in svc_rdma_accept()
606 svc_xprt_get(&newxprt->sc_xprt); in svc_rdma_accept()
607 if (newxprt->sc_qp && !IS_ERR(newxprt->sc_qp)) in svc_rdma_accept()
608 ib_destroy_qp(newxprt->sc_qp); in svc_rdma_accept()
609 rdma_destroy_id(newxprt->sc_cm_id); in svc_rdma_accept()
611 svc_xprt_put(&newxprt->sc_xprt); in svc_rdma_accept()