Lines Matching refs:ib_conn
212 int iser_create_fmr_pool(struct ib_conn *ib_conn, unsigned cmds_max) in iser_create_fmr_pool() argument
214 struct iser_device *device = ib_conn->device; in iser_create_fmr_pool()
218 ib_conn->fmr.page_vec = kmalloc(sizeof(*ib_conn->fmr.page_vec) + in iser_create_fmr_pool()
221 if (!ib_conn->fmr.page_vec) in iser_create_fmr_pool()
224 ib_conn->fmr.page_vec->pages = (u64 *)(ib_conn->fmr.page_vec + 1); in iser_create_fmr_pool()
240 ib_conn->fmr.pool = ib_create_fmr_pool(device->pd, ¶ms); in iser_create_fmr_pool()
241 if (!IS_ERR(ib_conn->fmr.pool)) in iser_create_fmr_pool()
245 kfree(ib_conn->fmr.page_vec); in iser_create_fmr_pool()
246 ib_conn->fmr.page_vec = NULL; in iser_create_fmr_pool()
248 ret = PTR_ERR(ib_conn->fmr.pool); in iser_create_fmr_pool()
249 ib_conn->fmr.pool = NULL; in iser_create_fmr_pool()
262 void iser_free_fmr_pool(struct ib_conn *ib_conn) in iser_free_fmr_pool() argument
265 ib_conn, ib_conn->fmr.pool); in iser_free_fmr_pool()
267 if (ib_conn->fmr.pool != NULL) in iser_free_fmr_pool()
268 ib_destroy_fmr_pool(ib_conn->fmr.pool); in iser_free_fmr_pool()
270 ib_conn->fmr.pool = NULL; in iser_free_fmr_pool()
272 kfree(ib_conn->fmr.page_vec); in iser_free_fmr_pool()
273 ib_conn->fmr.page_vec = NULL; in iser_free_fmr_pool()
378 int iser_create_fastreg_pool(struct ib_conn *ib_conn, unsigned cmds_max) in iser_create_fastreg_pool() argument
380 struct iser_device *device = ib_conn->device; in iser_create_fastreg_pool()
384 INIT_LIST_HEAD(&ib_conn->fastreg.pool); in iser_create_fastreg_pool()
385 ib_conn->fastreg.pool_size = 0; in iser_create_fastreg_pool()
395 ib_conn->pi_support, desc); in iser_create_fastreg_pool()
403 list_add_tail(&desc->list, &ib_conn->fastreg.pool); in iser_create_fastreg_pool()
404 ib_conn->fastreg.pool_size++; in iser_create_fastreg_pool()
410 iser_free_fastreg_pool(ib_conn); in iser_create_fastreg_pool()
417 void iser_free_fastreg_pool(struct ib_conn *ib_conn) in iser_free_fastreg_pool() argument
422 if (list_empty(&ib_conn->fastreg.pool)) in iser_free_fastreg_pool()
425 iser_info("freeing conn %p fr pool\n", ib_conn); in iser_free_fastreg_pool()
427 list_for_each_entry_safe(desc, tmp, &ib_conn->fastreg.pool, list) { in iser_free_fastreg_pool()
437 if (i < ib_conn->fastreg.pool_size) in iser_free_fastreg_pool()
439 ib_conn->fastreg.pool_size - i); in iser_free_fastreg_pool()
447 static int iser_create_ib_conn_res(struct ib_conn *ib_conn) in iser_create_ib_conn_res() argument
449 struct iser_conn *iser_conn = container_of(ib_conn, struct iser_conn, in iser_create_ib_conn_res()
450 ib_conn); in iser_create_ib_conn_res()
457 BUG_ON(ib_conn->device == NULL); in iser_create_ib_conn_res()
459 device = ib_conn->device; in iser_create_ib_conn_res()
471 ib_conn->comp = &device->comps[min_index]; in iser_create_ib_conn_res()
472 ib_conn->comp->active_qps++; in iser_create_ib_conn_res()
474 iser_info("cq index %d used for ib_conn %p\n", min_index, ib_conn); in iser_create_ib_conn_res()
477 init_attr.qp_context = (void *)ib_conn; in iser_create_ib_conn_res()
478 init_attr.send_cq = ib_conn->comp->cq; in iser_create_ib_conn_res()
479 init_attr.recv_cq = ib_conn->comp->cq; in iser_create_ib_conn_res()
485 if (ib_conn->pi_support) { in iser_create_ib_conn_res()
504 ret = rdma_create_qp(ib_conn->cma_id, device->pd, &init_attr); in iser_create_ib_conn_res()
508 ib_conn->qp = ib_conn->cma_id->qp; in iser_create_ib_conn_res()
510 ib_conn, ib_conn->cma_id, in iser_create_ib_conn_res()
511 ib_conn->cma_id->qp); in iser_create_ib_conn_res()
516 ib_conn->comp->active_qps--; in iser_create_ib_conn_res()
622 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_free_ib_conn_res() local
623 struct iser_device *device = ib_conn->device; in iser_free_ib_conn_res()
626 iser_conn, ib_conn->cma_id, ib_conn->qp); in iser_free_ib_conn_res()
628 if (ib_conn->qp != NULL) { in iser_free_ib_conn_res()
629 ib_conn->comp->active_qps--; in iser_free_ib_conn_res()
630 rdma_destroy_qp(ib_conn->cma_id); in iser_free_ib_conn_res()
631 ib_conn->qp = NULL; in iser_free_ib_conn_res()
640 ib_conn->device = NULL; in iser_free_ib_conn_res()
650 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_release() local
671 if (ib_conn->cma_id != NULL) { in iser_conn_release()
672 rdma_destroy_id(ib_conn->cma_id); in iser_conn_release()
673 ib_conn->cma_id = NULL; in iser_conn_release()
685 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_conn_terminate() local
705 if (ib_conn->cma_id) { in iser_conn_terminate()
706 err = rdma_disconnect(ib_conn->cma_id); in iser_conn_terminate()
712 err = ib_post_send(ib_conn->qp, &ib_conn->beacon, &bad_wr); in iser_conn_terminate()
714 iser_err("conn %p failed to post beacon", ib_conn); in iser_conn_terminate()
718 wait_for_completion(&ib_conn->flush_comp); in iser_conn_terminate()
742 struct ib_conn *ib_conn; in iser_addr_handler() local
750 ib_conn = &iser_conn->ib_conn; in iser_addr_handler()
758 ib_conn->device = device; in iser_addr_handler()
766 ib_conn->device->ib_device->name); in iser_addr_handler()
767 ib_conn->pi_support = false; in iser_addr_handler()
769 ib_conn->pi_support = true; in iser_addr_handler()
790 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_route_handler() local
791 struct iser_device *device = ib_conn->device; in iser_route_handler()
797 ret = iser_create_ib_conn_res(ib_conn); in iser_route_handler()
911 iser_conn->ib_conn.cma_id = NULL; in iser_cma_handler()
927 iser_conn->ib_conn.post_recv_buf_count = 0; in iser_conn_init()
928 init_completion(&iser_conn->ib_conn.flush_comp); in iser_conn_init()
933 spin_lock_init(&iser_conn->ib_conn.lock); in iser_conn_init()
946 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_connect() local
956 ib_conn->device = NULL; in iser_connect()
960 ib_conn->beacon.wr_id = ISER_BEACON_WRID; in iser_connect()
961 ib_conn->beacon.opcode = IB_WR_SEND; in iser_connect()
963 ib_conn->cma_id = rdma_create_id(iser_cma_handler, in iser_connect()
966 if (IS_ERR(ib_conn->cma_id)) { in iser_connect()
967 err = PTR_ERR(ib_conn->cma_id); in iser_connect()
972 err = rdma_resolve_addr(ib_conn->cma_id, src_addr, dst_addr, 1000); in iser_connect()
994 ib_conn->cma_id = NULL; in iser_connect()
1006 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvl() local
1012 sge.lkey = ib_conn->device->mr->lkey; in iser_post_recvl()
1019 ib_conn->post_recv_buf_count++; in iser_post_recvl()
1020 ib_ret = ib_post_recv(ib_conn->qp, &rx_wr, &rx_wr_failed); in iser_post_recvl()
1023 ib_conn->post_recv_buf_count--; in iser_post_recvl()
1032 struct ib_conn *ib_conn = &iser_conn->ib_conn; in iser_post_recvm() local
1036 for (rx_wr = ib_conn->rx_wr, i = 0; i < count; i++, rx_wr++) { in iser_post_recvm()
1048 ib_conn->post_recv_buf_count += count; in iser_post_recvm()
1049 ib_ret = ib_post_recv(ib_conn->qp, ib_conn->rx_wr, &rx_wr_failed); in iser_post_recvm()
1052 ib_conn->post_recv_buf_count -= count; in iser_post_recvm()
1064 int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc, in iser_post_send() argument
1070 ib_dma_sync_single_for_device(ib_conn->device->ib_device, in iser_post_send()
1081 ib_ret = ib_post_send(ib_conn->qp, &send_wr, &send_wr_failed); in iser_post_send()
1122 iser_handle_comp_error(struct ib_conn *ib_conn, in iser_handle_comp_error() argument
1126 struct iser_conn *iser_conn = container_of(ib_conn, struct iser_conn, in iser_handle_comp_error()
1127 ib_conn); in iser_handle_comp_error()
1143 ib_conn->post_recv_buf_count--; in iser_handle_comp_error()
1157 struct ib_conn *ib_conn; in iser_handle_wc() local
1161 ib_conn = wc->qp->qp_context; in iser_handle_wc()
1166 ib_conn); in iser_handle_wc()
1170 iser_snd_completion(tx_desc, ib_conn); in iser_handle_wc()
1183 complete(&ib_conn->flush_comp); in iser_handle_wc()
1185 iser_handle_comp_error(ib_conn, wc); in iser_handle_wc()