Lines Matching refs:ic

55 	struct rds_iw_connection *ic = conn->c_transport_data;
59 ic->i_flowctl = 1;
62 ic->i_flowctl = 0;
73 struct rds_iw_connection *ic = conn->c_transport_data;
87 rds_iwdev = ib_get_client_data(ic->i_cm_id->device, &rds_iw_client);
88 err = rds_iw_update_cm_id(rds_iwdev, ic->i_cm_id);
102 ic->i_flowctl ? ", flow control" : "");
112 struct rds_iw_connection *ic = conn->c_transport_data;
126 dp->dp_ack_seq = rds_iw_piggyb_ack(ic);
129 if (ic->i_flowctl) {
132 credits = IB_GET_POST_CREDITS(atomic_read(&ic->i_credits));
134 atomic_sub(IB_SET_POST_CREDITS(credits), &ic->i_credits);
150 struct rds_iw_connection *ic = conn->c_transport_data;
152 rdsdebug("conn %p ic %p event %u\n", conn, ic, event->event);
156 rdma_notify(ic->i_cm_id, IB_EVENT_COMM_EST);
249 struct rds_iw_connection *ic = conn->c_transport_data;
250 struct ib_device *dev = ic->i_cm_id->device;
268 ic->i_pd = rds_iwdev->pd;
269 ic->i_mr = rds_iwdev->mr;
272 &ic->i_send_ring, rds_iw_send_cq_comp_handler,
273 &ic->i_recv_ring, rds_iw_recv_cq_comp_handler,
278 ic->i_send_cq = attr.send_cq;
279 ic->i_recv_cq = attr.recv_cq;
285 ret = rdma_create_qp(ic->i_cm_id, ic->i_pd, &attr);
291 ic->i_send_hdrs = ib_dma_alloc_coherent(dev,
292 ic->i_send_ring.w_nr *
294 &ic->i_send_hdrs_dma, GFP_KERNEL);
295 if (!ic->i_send_hdrs) {
301 ic->i_recv_hdrs = ib_dma_alloc_coherent(dev,
302 ic->i_recv_ring.w_nr *
304 &ic->i_recv_hdrs_dma, GFP_KERNEL);
305 if (!ic->i_recv_hdrs) {
311 ic->i_ack = ib_dma_alloc_coherent(dev, sizeof(struct rds_header),
312 &ic->i_ack_dma, GFP_KERNEL);
313 if (!ic->i_ack) {
319 ic->i_sends = vmalloc(ic->i_send_ring.w_nr * sizeof(struct rds_iw_send_work));
320 if (!ic->i_sends) {
325 rds_iw_send_init_ring(ic);
327 ic->i_recvs = vmalloc(ic->i_recv_ring.w_nr * sizeof(struct rds_iw_recv_work));
328 if (!ic->i_recvs) {
334 rds_iw_recv_init_ring(ic);
335 rds_iw_recv_init_ack(ic);
341 rdsdebug("conn %p pd %p mr %p cq %p %p\n", conn, ic->i_pd, ic->i_mr,
342 ic->i_send_cq, ic->i_recv_cq);
383 struct rds_iw_connection *ic = NULL;
428 ic = conn->c_transport_data;
439 BUG_ON(ic->i_cm_id);
441 ic->i_cm_id = cm_id;
445 ic->i_dma_local_lkey = rds_iwdev->dma_local_lkey;
479 struct rds_iw_connection *ic = conn->c_transport_data;
487 ic->i_flowctl = rds_iw_sysctl_flow_control; /* advertise flow control */
506 struct rds_iw_connection *ic = conn->c_transport_data;
508 if (ic->i_cm_id == cm_id)
516 struct rds_iw_connection *ic = conn->c_transport_data;
523 ic->i_cm_id = rdma_create_id(rds_rdma_cm_event_handler, conn,
525 if (IS_ERR(ic->i_cm_id)) {
526 ret = PTR_ERR(ic->i_cm_id);
527 ic->i_cm_id = NULL;
532 rdsdebug("created cm id %p for conn %p\n", ic->i_cm_id, conn);
539 ret = rdma_bind_addr(ic->i_cm_id, (struct sockaddr *) &src);
543 rdma_destroy_id(ic->i_cm_id);
544 ic->i_cm_id = NULL;
548 rds_iwdev = ib_get_client_data(ic->i_cm_id->device, &rds_iw_client);
549 ic->i_dma_local_lkey = rds_iwdev->dma_local_lkey;
555 ret = rdma_resolve_addr(ic->i_cm_id, (struct sockaddr *)&src,
559 rdsdebug("addr resolve failed for cm id %p: %d\n", ic->i_cm_id,
561 rdma_destroy_id(ic->i_cm_id);
562 ic->i_cm_id = NULL;
576 struct rds_iw_connection *ic = conn->c_transport_data;
580 rdsdebug("cm %p pd %p cq %p %p qp %p\n", ic->i_cm_id,
581 ic->i_pd, ic->i_send_cq, ic->i_recv_cq,
582 ic->i_cm_id ? ic->i_cm_id->qp : NULL);
584 if (ic->i_cm_id) {
585 struct ib_device *dev = ic->i_cm_id->device;
587 rdsdebug("disconnecting cm %p\n", ic->i_cm_id);
588 err = rdma_disconnect(ic->i_cm_id);
594 " cm: %p err %d\n", ic->i_cm_id, err);
597 if (ic->i_cm_id->qp) {
599 ib_modify_qp(ic->i_cm_id->qp, &qp_attr, IB_QP_STATE);
603 rds_iw_ring_empty(&ic->i_send_ring) &&
604 rds_iw_ring_empty(&ic->i_recv_ring));
606 if (ic->i_send_hdrs)
608 ic->i_send_ring.w_nr *
610 ic->i_send_hdrs,
611 ic->i_send_hdrs_dma);
613 if (ic->i_recv_hdrs)
615 ic->i_recv_ring.w_nr *
617 ic->i_recv_hdrs,
618 ic->i_recv_hdrs_dma);
620 if (ic->i_ack)
622 ic->i_ack, ic->i_ack_dma);
624 if (ic->i_sends)
625 rds_iw_send_clear_ring(ic);
626 if (ic->i_recvs)
627 rds_iw_recv_clear_ring(ic);
629 if (ic->i_cm_id->qp)
630 rdma_destroy_qp(ic->i_cm_id);
631 if (ic->i_send_cq)
632 ib_destroy_cq(ic->i_send_cq);
633 if (ic->i_recv_cq)
634 ib_destroy_cq(ic->i_recv_cq);
641 if (ic->rds_iwdev)
642 rds_iw_remove_conn(ic->rds_iwdev, conn);
644 rdma_destroy_id(ic->i_cm_id);
646 ic->i_cm_id = NULL;
647 ic->i_pd = NULL;
648 ic->i_mr = NULL;
649 ic->i_send_cq = NULL;
650 ic->i_recv_cq = NULL;
651 ic->i_send_hdrs = NULL;
652 ic->i_recv_hdrs = NULL;
653 ic->i_ack = NULL;
655 BUG_ON(ic->rds_iwdev);
658 if (ic->i_rm) {
659 rds_message_put(ic->i_rm);
660 ic->i_rm = NULL;
664 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
666 atomic64_set(&ic->i_ack_next, 0);
668 ic->i_ack_next = 0;
670 ic->i_ack_recv = 0;
673 ic->i_flowctl = 0;
674 atomic_set(&ic->i_credits, 0);
676 rds_iw_ring_init(&ic->i_send_ring, rds_iw_sysctl_max_send_wr);
677 rds_iw_ring_init(&ic->i_recv_ring, rds_iw_sysctl_max_recv_wr);
679 if (ic->i_iwinc) {
680 rds_inc_put(&ic->i_iwinc->ii_inc);
681 ic->i_iwinc = NULL;
684 vfree(ic->i_sends);
685 ic->i_sends = NULL;
686 vfree(ic->i_recvs);
687 ic->i_recvs = NULL;
693 struct rds_iw_connection *ic;
697 ic = kzalloc(sizeof(struct rds_iw_connection), gfp);
698 if (!ic)
701 INIT_LIST_HEAD(&ic->iw_node);
702 tasklet_init(&ic->i_recv_tasklet, rds_iw_recv_tasklet_fn,
703 (unsigned long) ic);
704 mutex_init(&ic->i_recv_mutex);
706 spin_lock_init(&ic->i_ack_lock);
713 rds_iw_ring_init(&ic->i_send_ring, rds_iw_sysctl_max_send_wr);
714 rds_iw_ring_init(&ic->i_recv_ring, rds_iw_sysctl_max_recv_wr);
716 ic->conn = conn;
717 conn->c_transport_data = ic;
720 list_add_tail(&ic->iw_node, &iw_nodev_conns);
724 rdsdebug("conn %p conn ic %p\n", conn, conn->c_transport_data);
733 struct rds_iw_connection *ic = arg;
736 rdsdebug("ic %p\n", ic);
743 lock_ptr = ic->rds_iwdev ? &ic->rds_iwdev->spinlock : &iw_nodev_conns_lock;
746 list_del(&ic->iw_node);
749 kfree(ic);