Lines Matching refs:ic

59 	struct rds_ib_connection *ic = conn->c_transport_data;
63 ic->i_flowctl = 1;
66 ic->i_flowctl = 0;
76 struct rds_ib_connection *ic = conn->c_transport_data;
124 ic->i_active_side ? "Active" : "Passive",
128 ic->i_flowctl ? ", flow control" : "");
131 ic->i_sl = ic->i_cm_id->route.path_rec->sl;
133 atomic_set(&ic->i_cq_quiesce, 0);
139 rds_ib_send_init_ring(ic);
140 rds_ib_recv_init_ring(ic);
146 err = rds_ib_update_ipaddr(ic->rds_ibdev, &conn->c_laddr);
171 struct rds_ib_connection *ic = conn->c_transport_data;
172 struct rds_ib_device *rds_ibdev = ic->rds_ibdev;
195 cpu_to_be64(rds_ib_piggyb_ack(ic));
210 cpu_to_be64(rds_ib_piggyb_ack(ic));
218 if (ic->i_flowctl) {
222 (atomic_read(&ic->i_credits));
228 &ic->i_credits);
250 struct rds_ib_connection *ic = conn->c_transport_data;
256 tasklet_schedule(&ic->i_recv_tasklet);
259 static void poll_scq(struct rds_ib_connection *ic, struct ib_cq *cq,
272 if (wc->wr_id <= ic->i_send_ring.w_nr ||
274 rds_ib_send_cqe_handler(ic, wc);
276 rds_ib_mr_cqe_handler(ic, wc);
284 struct rds_ib_connection *ic = (struct rds_ib_connection *)data;
285 struct rds_connection *conn = ic->conn;
290 if (atomic_read(&ic->i_cq_quiesce))
293 poll_scq(ic, ic->i_send_cq, ic->i_send_wc);
294 ib_req_notify_cq(ic->i_send_cq, IB_CQ_NEXT_COMP);
295 poll_scq(ic, ic->i_send_cq, ic->i_send_wc);
300 rds_send_xmit(&ic->conn->c_path[0]);
303 static void poll_rcq(struct rds_ib_connection *ic, struct ib_cq *cq,
317 rds_ib_recv_cqe_handler(ic, wc, ack_state);
324 struct rds_ib_connection *ic = (struct rds_ib_connection *)data;
325 struct rds_connection *conn = ic->conn;
326 struct rds_ib_device *rds_ibdev = ic->rds_ibdev;
335 if (atomic_read(&ic->i_cq_quiesce))
339 poll_rcq(ic, ic->i_recv_cq, ic->i_recv_wc, &state);
340 ib_req_notify_cq(ic->i_recv_cq, IB_CQ_SOLICITED);
341 poll_rcq(ic, ic->i_recv_cq, ic->i_recv_wc, &state);
344 rds_ib_set_ack(ic, state.ack_next, state.ack_required);
345 if (state.ack_recv_valid && state.ack_recv > ic->i_ack_recv) {
347 ic->i_ack_recv = state.ack_recv;
351 rds_ib_attempt_ack(ic);
357 struct rds_ib_connection *ic = conn->c_transport_data;
359 rdsdebug("conn %p ic %p event %u (%s)\n", conn, ic, event->event,
364 rdma_notify(ic->i_cm_id, IB_EVENT_COMM_EST);
378 struct rds_ib_connection *ic = conn->c_transport_data;
384 tasklet_schedule(&ic->i_send_tasklet);
504 struct rds_ib_connection *ic = conn->c_transport_data;
505 struct ib_device *dev = ic->i_cm_id->device;
531 if (ic->i_send_ring.w_nr != max_wrs)
532 rds_ib_ring_resize(&ic->i_send_ring, max_wrs);
536 if (ic->i_recv_ring.w_nr != max_wrs)
537 rds_ib_ring_resize(&ic->i_recv_ring, max_wrs);
540 ic->i_pd = rds_ibdev->pd;
542 ic->i_scq_vector = ibdev_get_unused_vector(rds_ibdev);
543 cq_attr.cqe = ic->i_send_ring.w_nr + fr_queue_space + 1;
544 cq_attr.comp_vector = ic->i_scq_vector;
545 ic->i_send_cq = ib_create_cq(dev, rds_ib_cq_comp_handler_send,
548 if (IS_ERR(ic->i_send_cq)) {
549 ret = PTR_ERR(ic->i_send_cq);
550 ic->i_send_cq = NULL;
551 ibdev_put_vector(rds_ibdev, ic->i_scq_vector);
556 ic->i_rcq_vector = ibdev_get_unused_vector(rds_ibdev);
557 cq_attr.cqe = ic->i_recv_ring.w_nr;
558 cq_attr.comp_vector = ic->i_rcq_vector;
559 ic->i_recv_cq = ib_create_cq(dev, rds_ib_cq_comp_handler_recv,
562 if (IS_ERR(ic->i_recv_cq)) {
563 ret = PTR_ERR(ic->i_recv_cq);
564 ic->i_recv_cq = NULL;
565 ibdev_put_vector(rds_ibdev, ic->i_rcq_vector);
570 ret = ib_req_notify_cq(ic->i_send_cq, IB_CQ_NEXT_COMP);
576 ret = ib_req_notify_cq(ic->i_recv_cq, IB_CQ_SOLICITED);
587 attr.cap.max_send_wr = ic->i_send_ring.w_nr + fr_queue_space + 1;
588 attr.cap.max_recv_wr = ic->i_recv_ring.w_nr + 1;
593 attr.send_cq = ic->i_send_cq;
594 attr.recv_cq = ic->i_recv_cq;
600 ret = rdma_create_qp(ic->i_cm_id, ic->i_pd, &attr);
606 ic->i_send_hdrs = rds_dma_hdrs_alloc(rds_ibdev, &ic->i_send_hdrs_dma,
607 ic->i_send_ring.w_nr,
609 if (!ic->i_send_hdrs) {
615 ic->i_recv_hdrs = rds_dma_hdrs_alloc(rds_ibdev, &ic->i_recv_hdrs_dma,
616 ic->i_recv_ring.w_nr,
618 if (!ic->i_recv_hdrs) {
624 ic->i_ack = rds_dma_hdr_alloc(rds_ibdev->dev, &ic->i_ack_dma,
626 if (!ic->i_ack) {
632 ic->i_sends = vzalloc_node(array_size(sizeof(struct rds_ib_send_work),
633 ic->i_send_ring.w_nr),
635 if (!ic->i_sends) {
641 ic->i_recvs = vzalloc_node(array_size(sizeof(struct rds_ib_recv_work),
642 ic->i_recv_ring.w_nr),
644 if (!ic->i_recvs) {
650 rds_ib_recv_init_ack(ic);
652 rdsdebug("conn %p pd %p cq %p %p\n", conn, ic->i_pd,
653 ic->i_send_cq, ic->i_recv_cq);
658 vfree(ic->i_sends);
661 rds_dma_hdr_free(rds_ibdev->dev, ic->i_ack, ic->i_ack_dma,
663 ic->i_ack = NULL;
666 rds_dma_hdrs_free(rds_ibdev, ic->i_recv_hdrs, ic->i_recv_hdrs_dma,
667 ic->i_recv_ring.w_nr, DMA_FROM_DEVICE);
668 ic->i_recv_hdrs = NULL;
669 ic->i_recv_hdrs_dma = NULL;
672 rds_dma_hdrs_free(rds_ibdev, ic->i_send_hdrs, ic->i_send_hdrs_dma,
673 ic->i_send_ring.w_nr, DMA_TO_DEVICE);
674 ic->i_send_hdrs = NULL;
675 ic->i_send_hdrs_dma = NULL;
678 rdma_destroy_qp(ic->i_cm_id);
680 ib_destroy_cq(ic->i_recv_cq);
681 ic->i_recv_cq = NULL;
683 ib_destroy_cq(ic->i_send_cq);
684 ic->i_send_cq = NULL;
789 struct rds_ib_connection *ic = NULL;
885 ic = conn->c_transport_data;
897 BUG_ON(ic->i_cm_id);
899 ic->i_cm_id = cm_id;
934 struct rds_ib_connection *ic = conn->c_transport_data;
942 ic->i_flowctl = rds_ib_sysctl_flow_control; /* advertise flow control */
963 if (ic->i_cm_id == cm_id)
966 ic->i_active_side = true;
975 struct rds_ib_connection *ic;
978 ic = conn->c_transport_data;
988 ic->i_cm_id = rdma_create_id(&init_net, handler, conn,
990 if (IS_ERR(ic->i_cm_id)) {
991 ret = PTR_ERR(ic->i_cm_id);
992 ic->i_cm_id = NULL;
997 rdsdebug("created cm id %p for conn %p\n", ic->i_cm_id, conn);
1027 ret = rdma_resolve_addr(ic->i_cm_id, (struct sockaddr *)&src,
1031 rdsdebug("addr resolve failed for cm id %p: %d\n", ic->i_cm_id,
1033 rdma_destroy_id(ic->i_cm_id);
1034 ic->i_cm_id = NULL;
1049 struct rds_ib_connection *ic = conn->c_transport_data;
1052 rdsdebug("cm %p pd %p cq %p %p qp %p\n", ic->i_cm_id,
1053 ic->i_pd, ic->i_send_cq, ic->i_recv_cq,
1054 ic->i_cm_id ? ic->i_cm_id->qp : NULL);
1056 if (ic->i_cm_id) {
1057 rdsdebug("disconnecting cm %p\n", ic->i_cm_id);
1058 err = rdma_disconnect(ic->i_cm_id);
1064 ic->i_cm_id, err);
1082 rds_ib_ring_empty(&ic->i_recv_ring) &&
1083 (atomic_read(&ic->i_signaled_sends) == 0) &&
1084 (atomic_read(&ic->i_fastreg_inuse_count) == 0) &&
1085 (atomic_read(&ic->i_fastreg_wrs) == RDS_IB_DEFAULT_FR_WR));
1086 tasklet_kill(&ic->i_send_tasklet);
1087 tasklet_kill(&ic->i_recv_tasklet);
1089 atomic_set(&ic->i_cq_quiesce, 1);
1092 if (ic->i_cm_id->qp)
1093 rdma_destroy_qp(ic->i_cm_id);
1094 if (ic->i_send_cq) {
1095 if (ic->rds_ibdev)
1096 ibdev_put_vector(ic->rds_ibdev, ic->i_scq_vector);
1097 ib_destroy_cq(ic->i_send_cq);
1100 if (ic->i_recv_cq) {
1101 if (ic->rds_ibdev)
1102 ibdev_put_vector(ic->rds_ibdev, ic->i_rcq_vector);
1103 ib_destroy_cq(ic->i_recv_cq);
1106 if (ic->rds_ibdev) {
1108 if (ic->i_send_hdrs) {
1109 rds_dma_hdrs_free(ic->rds_ibdev,
1110 ic->i_send_hdrs,
1111 ic->i_send_hdrs_dma,
1112 ic->i_send_ring.w_nr,
1114 ic->i_send_hdrs = NULL;
1115 ic->i_send_hdrs_dma = NULL;
1118 if (ic->i_recv_hdrs) {
1119 rds_dma_hdrs_free(ic->rds_ibdev,
1120 ic->i_recv_hdrs,
1121 ic->i_recv_hdrs_dma,
1122 ic->i_recv_ring.w_nr,
1124 ic->i_recv_hdrs = NULL;
1125 ic->i_recv_hdrs_dma = NULL;
1128 if (ic->i_ack) {
1129 rds_dma_hdr_free(ic->rds_ibdev->dev, ic->i_ack,
1130 ic->i_ack_dma, DMA_TO_DEVICE);
1131 ic->i_ack = NULL;
1134 WARN_ON(ic->i_send_hdrs);
1135 WARN_ON(ic->i_send_hdrs_dma);
1136 WARN_ON(ic->i_recv_hdrs);
1137 WARN_ON(ic->i_recv_hdrs_dma);
1138 WARN_ON(ic->i_ack);
1141 if (ic->i_sends)
1142 rds_ib_send_clear_ring(ic);
1143 if (ic->i_recvs)
1144 rds_ib_recv_clear_ring(ic);
1146 rdma_destroy_id(ic->i_cm_id);
1151 if (ic->rds_ibdev)
1152 rds_ib_remove_conn(ic->rds_ibdev, conn);
1154 ic->i_cm_id = NULL;
1155 ic->i_pd = NULL;
1156 ic->i_send_cq = NULL;
1157 ic->i_recv_cq = NULL;
1159 BUG_ON(ic->rds_ibdev);
1162 if (ic->i_data_op) {
1165 rm = container_of(ic->i_data_op, struct rds_message, data);
1167 ic->i_data_op = NULL;
1171 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
1173 atomic64_set(&ic->i_ack_next, 0);
1175 ic->i_ack_next = 0;
1177 ic->i_ack_recv = 0;
1180 ic->i_flowctl = 0;
1181 atomic_set(&ic->i_credits, 0);
1184 rds_ib_ring_init(&ic->i_send_ring, ic->i_send_ring.w_nr);
1185 rds_ib_ring_init(&ic->i_recv_ring, ic->i_recv_ring.w_nr);
1187 if (ic->i_ibinc) {
1188 rds_inc_put(&ic->i_ibinc->ii_inc);
1189 ic->i_ibinc = NULL;
1192 vfree(ic->i_sends);
1193 ic->i_sends = NULL;
1194 vfree(ic->i_recvs);
1195 ic->i_recvs = NULL;
1196 ic->i_active_side = false;
1201 struct rds_ib_connection *ic;
1206 ic = kzalloc(sizeof(struct rds_ib_connection), gfp);
1207 if (!ic)
1210 ret = rds_ib_recv_alloc_caches(ic, gfp);
1212 kfree(ic);
1216 INIT_LIST_HEAD(&ic->ib_node);
1217 tasklet_init(&ic->i_send_tasklet, rds_ib_tasklet_fn_send,
1218 (unsigned long)ic);
1219 tasklet_init(&ic->i_recv_tasklet, rds_ib_tasklet_fn_recv,
1220 (unsigned long)ic);
1221 mutex_init(&ic->i_recv_mutex);
1223 spin_lock_init(&ic->i_ack_lock);
1225 atomic_set(&ic->i_signaled_sends, 0);
1226 atomic_set(&ic->i_fastreg_wrs, RDS_IB_DEFAULT_FR_WR);
1232 rds_ib_ring_init(&ic->i_send_ring, 0);
1233 rds_ib_ring_init(&ic->i_recv_ring, 0);
1235 ic->conn = conn;
1236 conn->c_transport_data = ic;
1239 list_add_tail(&ic->ib_node, &ib_nodev_conns);
1243 rdsdebug("conn %p conn ic %p\n", conn, conn->c_transport_data);
1252 struct rds_ib_connection *ic = arg;
1255 rdsdebug("ic %p\n", ic);
1262 lock_ptr = ic->rds_ibdev ? &ic->rds_ibdev->spinlock : &ib_nodev_conns_lock;
1265 list_del(&ic->ib_node);
1268 rds_ib_recv_free_caches(ic);
1270 kfree(ic);